简体   繁体   English

Spring map将请求参数自动添加到POJO

[英]Spring map GET request parameters to POJO automatically

I have method in my REST controller that contains a lot of parameters. 我的REST控制器中有一些方法,它包含很多参数。 For example: 例如:

@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) {
    // ......
}

and I would like to map all GET request parameters to a POJO object like: 我想将所有GET请求参数映射到POJO对象,如:

public class RequestParamsModel {

   public RequestParamsModel() {

   }

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

I need something like we can do using @RequestBody in REST Controller. 我需要在REST控制器中使用@RequestBody这样的东西。

Is it possible to do in Spring 3.x ? 在Spring 3.x中可以做到吗?

Thanks! 谢谢!

Possible and easy, make sure that your bean has proper accessors for the fields. 可能且简单,确保您的bean具有适当的字段访问权限。 You can add proper validation per property, just make sure that you have the proper jars in place. 您可以为每个属性添加适当的验证,只需确保您有适当的jar。 In terms of code it would be something like 在代码方面它会是这样的

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;
    }
    //  ...
}

The controller method would be: 控制器方法是:

import javax.validation.Valid;

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

And the request, something like: 请求,例如:

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

Are you trying to do 你想做吗?

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM