Spring автоматически отображает параметры запроса GET для POJO

У меня есть метод в моем контроллере REST, который содержит много параметров. Например:

@RequestMapping(value = "/getItem", method = RequestMethod.GET)
public ServiceRequest<List<SomeModel>> getClaimStatuses(
        @RequestParam(value = "param1", required = true) List<String> param1,
        @RequestParam(value = "param2", required = false) String param2,
        @RequestParam(value = "param3", required = false) List<String> param3,
        @RequestParam(value = "param4", required = false) List<String> param4,
        @RequestParam(value = "param5", required = false) List<String> param5) {
    // ......
}

и я хотел бы сопоставить все параметры запроса GET с объектом POJO, например:

public class RequestParamsModel {

   public RequestParamsModel() {

   }

   public List<String> param1;
   public String param2;
   public List<String> param3;
   public String param4;
   public String param5;
}

Мне нужно что-то подобное, мы можем использовать @RequestBody в REST Controller.

Можно ли сделать в Spring 3.x?

Спасибо!

Ответ 1

Возможно и просто, убедитесь, что у вашего боба есть подходящие средства доступа к полям. Вы можете добавить правильную проверку для каждого свойства, просто убедитесь, что у вас есть правильные банки на месте. С точки зрения кода это было бы что-то вроде

import javax.validation.constraints.NotNull;

public class RequestParamsModel {

    public RequestParamsModel() {}

    private List<String> param1;
    private String param2;
    private List<String> param3;
    private String param4;
    private String param5;

    @NotNull
    public List<String> getParam1() {
        return param1;
    }
    //  ...
}

Метод контроллера будет:

import javax.validation.Valid;

@RequestMapping(value = "/getItem", method = RequestMethod.GET)
public ServiceRequest<List<SomeModel>> getClaimStatuses(@Valid RequestParamsModel model) {
    // ...
}

И запрос, что-то вроде:

/getItem?param1=list1,list2&param2=ok

Ответ 2

Вы пытаетесь сделать

@RequestMapping(value = "/getItem", method = RequestMethod.GET)
public ServiceRequest<List<SomeModel>> getClaimStatuses(@ModelAttribute RequestParamsModel requestParamModel) {
...
}