使用@RequestParam将bean列表传递给控制器

时间:2015-04-10 16:07:49

标签: java spring spring-mvc

我需要将bean列表传递给我的控制器。

@RestController
@RequestMapping("/api")
public class MyController {
    @RequestMapping(value = "/my/{id}/method", method = RequestMethod.POST)
    public Result editRequest(
            @RequestParam("first") String first,
            @RequestParam("second") String second,
            @RequestParam("third") String third,
            @RequestParam("items") List<MyBean> items,
            @PathVariable("id") Long id

    ) {
        ...
    }
}

和MyBean:

public class MyBean {
    private Integer fst;
    private String snd;
    private Long thd;
    private Integer fo;

    public MyBean() {
    }

    ... get/set
}

我需要从AngularJS中做到这一点,但现在我正在使用curl在bash中测试它。我需要什么命令?

curl --data "first=-11374862&second=-1000&third=61&items[0][fst]=124231664&items[0][snd]=12&items[0][thd]=123&items[0][fo]=null" http://localhost:8080/api/my/100000/method --header "Content-Type:application/x-www-form-urlencoded"

会产生这样的错误:

Required List parameter 'items' is not present

2 个答案:

答案 0 :(得分:1)

你可以试试下面的卷曲。你现在的curl命令有items作为二维数组,而不是一个对象数组。

curl --data "first=-11374862&second=-1000&third=61&items[0].fst=124231664&items[0].snd=12&items[0].thd=123&items[0].fo=null" http://localhost:8080/api/my/100000/method --header "Content-Type:application/x-www-form-urlencoded"

此外,您可以考虑使用@RequestBody将请求正文映射到对象。请检查此post

答案 1 :(得分:1)

你无法传递对象列表,我可以使用@RequestParam("ids[]") Integer[] ids来考虑原语和字符串,或者尝试使用@RequestBody传递列表。