关于java:Spring rest json post null值

Spring rest json post null values

我有一个Spring Rest端点在做一个简单的Hello应用程序。它应该接受"name":"something"并返回"hello,something"。

我的控制器是:

1
2
3
4
5
6
7
8
9
10
11
@RestController
public class GreetingController {

    private static final String template ="Hello, %s!";

    @RequestMapping(value="/greeting", method=RequestMethod.POST)
    public String greeting(Person person) {
        return String.format(template, person.getName());
    }

}

人:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Person {

    private String name;

    public Person() {
        this.name ="World";
    }

    public Person(String name) {
        this.name = name;
    }

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

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

当我向服务机构提出请求时

1
curl -X POST -d '{"name":"something"}' http://localhost:8081/testapp/greeting

我得到

1
Hello, World!

看起来它没有将JSON反序列化到Person对象中。它使用的是默认的构造函数,然后不设置名称。我发现了这一点:如何在REST中创建一个POST请求来接受JSON输入?所以我尝试在控制器上添加一个@requestbody,但是这会导致一些关于"content type"应用程序的错误/x-www-form-urlencoded;charset=utf-8'不受支持。我看到这里介绍了:content-type'application/x-www-form-urlencoded;charset=utf-8'不支持@requestbody多值映射,它建议删除@requestbody

我已经尝试删除它也不喜欢的默认构造函数。

这个问题涉及使用SpringMVC的空值RESTWebService,在发布JSON时返回空值,但它建议添加@requestbody,但与上面的冲突…


您必须设置@RequestBody来告诉spring应该使用什么来设置您的person参数。

1
2
3
 public Greeting greeting(@RequestBody Person person) {
    return new Greeting(counter.incrementAndGet(), String.format(template, person.getName()));
}


必须使用@requestmapping设置'products'(value="/greeting",method=requestmethod.post)

使用以下代码

1
2
3
4
@RequestMapping(value="/greeting", method=RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
 public String greeting(@RequestBody Person person) {
        return String.format(template, person.getName());
    }