5

考虑以下要求:请求参数必须使用 Spring MVC 3.0 绑定到对象。请求参数包含下划线(例如http://myurl:80/x?param_one=1&param_two=2)。这些参数应绑定到以下对象:

class MyObject {
    private Integer paramOne;
    private Integer paramTwo;

    ...
}

你会怎么做呢?

重要提示:考虑到可能存在大量这样的参数和对象,并且在包含下划线的对象上定义 setter 方法并不是一种好的做法。

4

3 回答 3

3

Rajith 的答案专门针对控制器方法,并没有解决您最初询问如何将下划线参数绑定到对象的问题。

我目前采用的 hacky 解决方案是完成您实际要求的是以这种风格命名我的设置器:

public void setProject_ids(List<Long> project_ids) {

请注意,RequestParam 不能应用于方法,并且应用于此 setter 的参数时没有效果。

于 2015-08-14T21:34:23.843 回答
1

您可以使用@RequestMapping属性执行此操作

@RequestParam(value = "param_One") String paramOne,@RequestParam(value = "param_two") String paramTwo

将此添加到方法签名中

但为了最佳实践,最好传递相同的变量名

于 2012-11-07T08:12:30.877 回答
0

九年后......我更清洁的解决方案是使用构造函数注入并用@ConstructorProperties. 这样,您可以保持类不可变并使用 Java 命名约定。

@Value
class MyObject {
  Integer paramOne;
  Integer paramTwo;

  @ConstructorProperties({"param_one", "param_two"})
  MyObject(Integer paramOne, Integer paramTwo) {
    this.paramOne = paramOne;
    this.paramTwo = paramTwo;
  }

即使你有一个很长的字段列表,你也可以生成构造函数,只需要写注解。

于 2021-09-29T11:11:24.420 回答