如何使用Spring MVC从API REST获取对象

时间:2014-02-18 10:44:21

标签: java json spring spring-mvc jackson

我有一个Spring MVC项目,我已经配置了jackson库来自动将响应(java对象)转换为json,它在GET请求中工作如下。

    @RequestMapping(method = RequestMethod.GET)
public @ResponseBody Orders createOrder(Model model){

            Orders orders = new Orders();
            //Populate orders.....

    return orders;
}

但是当我尝试处理POST请求并从json的请求中获取对象时,我得到错误“400 Bad Request”,因为Spring无法从json创建对象Orders。我把与GET方法响应相同的json文件放在一起,所以我认为该文件格式正确。

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody ResponseEntity<String> createOrder(@RequestBody Orders orders){

    LOG.info(orders.toString());

    return new ResponseEntity<String>("", HttpStatus.CREATED);
}

如果我将@RequestBody类更改为String(createOrder(@RequestBody String orders)),则会很好地处理POST请求。

我是否必须创建一个映射器,将输入json映射到类Order?

更新: 我创建了一个最简单的例子来尝试它,我收到错误400.例如:

域名:Home.java

public class Home {
    private String address = "Calle mármoles";

    public Home(){

    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

控制器:

@RequestMapping(method = RequestMethod.POST)
public @ResponseBody ResponseEntity<String> createOrder2(@RequestBody Home orders){
    return new ResponseEntity<String>("{}", HttpStatus.CREATED);
}

JSON(POST):

{
  address: "Prueba"
}

[解决]

我错过了将“”放在参数名称的名称中。

1 个答案:

答案 0 :(得分:0)

[解决]

我错过了将“”放在参数名称的名称中。

此外,该类必须有一个默认的空白构造函数,以便让jackson库创建对象。