我正在尝试学习RESTful Web服务。我正在创建一组简单的Web服务。我开始工作时卡住了。
我想将JSON输入传递给POST方法。这就是我在代码中所做的:
@RequestMapping(value = "/create", method = RequestMethod.POST, consumes="application/x-www-form-urlencoded", produces="text/plain")
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody String createChangeRequest(MyCls mycls) {
return "YAHOOOO!!";
}
我在我的POM.xml中包含了杰克逊。
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.9.13</version>
</dependency>
MyCls是一个简单的类,有几个getter和setter。
我从chrome的简单REST客户端调用上面的POST服务。
URL: http://localhost:8080/MYWS/cls/create
Data: {<valid-json which corresponds to each variable in the MyCls pojo}
我看到以下回复:
415 Unsupported Media Type
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
我尝试在REST客户端的POST请求中添加标题为“application / json” - 但这没有帮助。
有人能让我知道我在这里缺少什么吗?如何自动将输入JSON映射到MyCls pojo?我在这里错过了任何配置吗?
编辑: MyCls.java
public class MyCls{
private String name;
private String email;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
name= name;
}
---similar getter and setter for email, address--
}
来自chrome Simple REST Client的json:
{"name":"abc", "email":"de@test","address":"my address"}
编辑: 将我的控制器方法更改为以下内容,但仍然看到相同的错误:
@RequestMapping(value = "/create", method = RequestMethod.POST, consumes="application/json", produces="text/plain")
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody String createChangeRequest(@RequestBody MyCls mycls) {
return "YAHOOOO!!";
}
答案 0 :(得分:4)
假设您的客户端正在发送application/json
作为其内容类型,则处理程序映射到
consumes="application/x-www-form-urlencoded"
将无法处理它。实际Content-type
与预期不符。
如果您期待application/json
,则应该
consumes="application/json"
另外,声明
public @ResponseBody String createChangeRequest(MyCls mycls) {
(在默认环境中)等同于
public @ResponseBody String createChangeRequest(@ModelAttribute MyCls mycls) {
这意味着MyCls
对象是从请求参数创建的,而不是从JSON主体创建的。相反,你应该
public @ResponseBody String createChangeRequest(@RequestBody MyCls mycls) {
以便Spring将您的JSON反序列化为MyCls
类型的对象。