在Spring Boot Controller中使用对象而不是多个参数和文件

时间:2016-01-11 16:10:17

标签: java spring-mvc spring-boot

我有一个@RestController允许使用一些@RequestParam参数和2个@RequestPart参数进行POST,以便能够在服务层中创建需要一些输入+2个文件的对象像这样:

@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity createBook(@RequestParam("authorId") UUID authorId,
                                           @RequestParam("pages") int pages,                                               
                                           @RequestParam("rating") BookRating rating,
                                           @RequestPart("file") MultipartFile file,
                                           @RequestPart("file2") MultipartFile file2) {

我想创建一个封装所有这些参数的对象,所以我可以这样做:

public ResponseEntity createBook( CreateBookParameters params ) {

我该怎么做?我需要在控制器中使用什么注释?我需要在CreateBookParameters中使用任何注释,还是这是一个简单的POJO?

如果我做了这些更改,我是否需要更改我的请求(我正在使用" form-data"在Postman中设置)?

2 个答案:

答案 0 :(得分:1)

您是否尝试过Spring的默认反射行为?试试这个:

public class CreateBookParameters {
    private UUID authorId;
    private int pages;
    private BookRating rating;
    private MultipartFile file;
    private MultipartFile file2;

    // add getters & setters for each
}

@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity createBook(CreateBookParameters p) {
  // ...
}

答案 1 :(得分:0)

另一种选择是查看@RequestBody注释,看看是否可以使用它。