我想创建一些基于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>
您应该在使用curl命令时设置accept头,如下所示。希望这有帮助。
curl -i -H "Accept: application/json" <your curl url>
看起来问题在于您实际返回的不是JSON格式。我在你的配置中没有看到任何可以处理这个问题的东西。
我已经有一两年没有处理这个问题了,所以如果这已经改变了,请原谅我,但是从我记得的情况来看,Spring不会仅仅通过指定响应类型为“应用程序/json”来隐式地将对象转换为JSON
为此,您可能应该查找一个可以与Spring集成的库。我记得用的那个叫杰克逊。
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: