2014-01-12 57 views
2

我有一些问题与发送请求到Spring MVC的控制器。 我有实体:400错误请求JSON数据

public class Person { 
    private String name; 
    private int age; 
    private String city; 
    //..getters setters 

} 

,并用SpringMVC控制器:

@Controller 
@RequestMapping("/companies") 
public class FirmaController { 
    @RequestMapping(value = "/addPerson", method = RequestMethod.POST, headers = {"Content-type=application/json"}) 
    public String addPerson(@RequestBody Person person) { 
     return "person"; 
    } 
} 

当我想发送请求到服务器,卷曲:

curl -i -X POST -HContent-Type:application/json -HAccept:application/json http://localhost:8080/api/companies/addPerson -d "{ 'name': 'Gerry', 'age': 20, 'city': 'Sydney' }" 

我有一个HTTP/1.1 400错误请求

HTTP/1.1 400 Bad Request 
Content-Type: text/html;charset=ISO-8859-1 
Cache-Control: must-revalidate,no-cache,no-store 
Content-Length: 1392 
Server: Jetty(8.1.10.v20130312) 

我做什么了?

回答

3

这是正确的:

curl -i -X POST -HContent-Type:application/json 
-HAccept:application/json 
http://localhost:8080/api/companies/addPerson 
-d '{ "name": "Gerry", "age": 20, "city": "Sydney" }' 
+0

我刚才看到您已经添加双引号JSON数据的键值对,你做了还有什么可以使它工作? – Chaitanya

+0

不可以。只有键/值的双引号 –

5

您发送的数据是无效的JSON。字符串必须用双引号"包装,而不是单引号',就像你的例子。

如果您没有旧版本的弹簧,您应该使用consumes = "application/json"而不是headers=...

+0

我同意你的看法。单引号也是正确的。 我试图与“和\”(与转义字符,这是相同的问题;/ –

+0

@PiotrSobolewski的[规格](http://www.ietf.org/rfc/rfc4627.txt)否则说JSON名称是用双引号'“'。 –

+0

是否使用杰克逊映射依赖? –