【问题标题】:Spring map GET request parameters to POJO automaticallySpring自动将GET请求参数映射到POJO
【发布时间】:2014-10-28 15:37:13
【问题描述】:

我的 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;
}

我需要像我们在 REST 控制器中使用 @RequestBody 所做的那样。

可以在 Spring 3.x 中做吗?

谢谢!

【问题讨论】:

标签: java spring spring-mvc


【解决方案1】:

可能且简单,请确保您的 bean 具有正确的字段访问器。您可以为每个属性添加适当的验证,只需确保您有适当的罐子。就代码而言,它类似于

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

【讨论】:

  • NotNull注解的封装是什么?
  • 它的javax.validation.constraints.NotNull
  • 线程可能已经死了,但我有一个问题。如果我们这里没有使用@RequestParam 注解,spring 怎么知道将请求参数映射到类,在这种情况下是 RequestParamsModel?
  • @KalyanM 不确定,但我想它是按惯例工作的
【解决方案2】:

你在尝试吗

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

【讨论】:

  • 是的。我有空的 requestParamModel。据我了解,ModelAttribute 用于响应模型。
  • 它适用于 ModelAttribute 注释和没有,但 RequestParamsModel 必须包含 setter 方法。谢谢!
猜你喜欢
  • 2021-12-15
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2017-07-26
相关资源
最近更新 更多