当前位置: 首页 > 知识库问答 >
问题:

JavaSpringJSON响应问题

陶泳
2023-03-14

我想创建一些基于Spring的REST服务示例。我想得到基于Foo对象的JSON,但是当我尝试使用curl发送请求时,它显示406错误:“此请求标识的资源仅能够根据请求“接受”标题生成具有不可接受特征的响应。”这是我的代码: RestControl.java

package hello;

import org.springframework.stereotype.*;

import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/app")
public class RestControl {
    @RequestMapping(value="/get",produces="application/json", method=RequestMethod.GET)
    @ResponseBody
    public Foo getFoo(){
        Foo f = new Foo();
        f.setId(new Long(1));
        f.setName("lol");
        return f;
    }
}

福。爪哇:

package hello;

public class Foo {
    private Long id;
    private String name;

    public void setId(Long id){
        this.id=id;
    }

    public void setName(String name){
        this.name=name;
    }

    public Long getId(){
        return this.id;
    }

    public String getName(){
        return this.name;
    }

}

网状物xml:

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Spring Web MVC Application</display-name>

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

</web-app>

mvc调度程序servlet。xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">


    <mvc:annotation-driven />

    <bean id="RestControl" 
          class="hello.RestControl" />

    <bean id="foo"
          class="hello.Foo" />

</beans>

Upd2:org。科德豪斯。杰克逊制图器asl 1.9。13

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring-framework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring-framework.version}</version>
    </dependency>

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.2.12</version>
    </dependency>

    <!-- Spring ORM support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring-framework.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring-framework.version}</version>
    </dependency>


    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring-framework.version}</version>
    </dependency>

共有3个答案

乌甫
2023-03-14

您应该在使用curl命令时设置accept头,如下所示。希望这有帮助。

curl -i -H "Accept: application/json" <your curl url>
董奇思
2023-03-14

看起来问题在于您实际返回的不是JSON格式。我在你的配置中没有看到任何可以处理这个问题的东西。

我已经有一两年没有处理这个问题了,所以如果这已经改变了,请原谅我,但是从我记得的情况来看,Spring不会仅仅通过指定响应类型为“应用程序/json”来隐式地将对象转换为JSON

为此,您可能应该查找一个可以与Spring集成的库。我记得用的那个叫杰克逊。

江恩
2023-03-14

Spring本身不知道如何正确地序列化和反序列化您的域对象,您需要在您的项目中包含Jackson来处理:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.2.2</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.2.2</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.2.2</version>
    </dependency>

不需要特殊的配置来告诉Jackson处理您的JSON翻译,除非您想在这个过程中添加一些自定义。

 类似资料:
  • 我经常使用来运行React应用程序 这些天来,我试图使用这个命令,但我遇到了一个错误 它就像这样 附言:我正在使用ubuntu 20.04 我已经删除了缓存, 我删除node_modules并运行npm安装 我仍然面临同样的问题 如果我使用sudo npm启动,一切正常

  • 我开发了聊天应用程序。要在聊天中传输图像,我们首先将其上传到内容模块,然后将该id共享给接收者。如果出现问题,我们调用MessageListner中的getFile。但是,将相同的代码放在该方法之外工作很好。请查看以下代码: mychatController.java 这些方法在ChatActivity中实现 ChatActivity.java 日志: 我们无法得到回应。

  • 我在main.go中创建了一个简单的反向代理,如下所示: 这工作正常,但是,我想记录从服务器返回的响应。我也可以使用Go语言推荐的标准RoundTrip方法中的以下代码来实现这一点: 除了响应之外,上述所有功能都可以正常工作,当内容编码为gzip时,字符串在日志中显示为非utf8 gzip字符。这似乎是golang的疏忽,但可能是我在文档中遗漏了一些东西,我已经读了好几遍了。我不能在这里发布日志,

  • 我正在尝试访问为执行验证而编写的HttpServerResponse主体。但是,<代码>ctx。回答endHandler(e-

  • 我正在用空手道的bdd方法编写api测试自动代码。断言部分让我很难过。我的响应如下所示,当我调用路径时,我通过http://jsonpath.herokuapp.com/网站检查了空空数组。然而,当我运行我的小cucumber空手道功能,然后它给我的响应为空,它仍然给我错误断言。它说实际: null,应为:null。。。 我看不到任何错误,如何修复?这是一个bug还是有什么方法可以处理? 我的回应

  • 如果访问令牌请求是有效的且被授权,授权服务器如5.1节所述颁发访问令牌以及可选的刷新令牌。刷新令牌不应该包含在内。 如果请求因客户端身份验证失败或无效,授权服务器如5.2节所述的返回错误响应。 一个样例成功响应: HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: