【问题标题】:SpringMVC 400 Bad request JSON dataSpringMVC 400 错误请求 JSON 数据
【发布时间】:2014-01-31 11:41:46
【问题描述】:

我在向 spring mvc 控制器发送请求时遇到了一些问题。 我有实体:

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 向服务器发送请求时:

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) 

我做错了什么?

【问题讨论】:

    标签: json spring http spring-mvc


    【解决方案1】:

    您发送的数据不是有效的 JSON。字符串必须用双引号 " 而不是单引号 ' 像您的示例一样。

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

    【讨论】:

    • 我不同意你的观点。单引号也是正确的。我尝试使用“和\”(使用转义字符,这是同样的问题;/
    • @PiotrSobolewski specification 另有说法。 JSON 名称用双引号括起来 "
    • 你在使用jackson mapper依赖吗?
    • 嗨。你想从这个方法返回什么?
    【解决方案2】:

    这个是对的:

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

    【讨论】:

    • 我刚刚看到您在JSON数据的键值对中添加了双引号,您是否做了其他任何事情来使它工作?
    • 没有。键/值上只有双引号
    猜你喜欢
    • 2018-08-13
    • 2015-10-15
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多