当前位置: 首页 > 面试题库 >

如何在不使用setter的情况下绑定请求参数?

辛锦
2023-03-14
问题内容

我有一个带有GET处理程序的简单控制器,该处理程序接受一个对象来绑定请求参数:

@RestController
@RequestMapping("/test")
public class SampleController {

    @GetMapping
    public SomeResponse find(RequestParams params) {
       // some code
    }

}

RequestParams是一个简单的POJO类:

public class RequestParams  {

    private String param1;
    private String param2;

    // constructor, getter, and setters

}

一切正常,但我想摆脱设置者,使该对象不可变为公共使用。在Spring 5.0.2
之前的处理程序方法文档中@RequestMapping,我们了解到可能的有效方法参数是:

命令或表单对象将请求参数绑定到Bean属性(通过设置器) 或直接 绑定 到字段

是否可以以某种方式覆盖默认的Spring Boot配置,以便使用反射而不是使用setter将请求参数绑定到类属性?

更新2018

在Spring的更高版本的文档中,带引号的语句已被重新措词,并且不再包含有关将请求参数直接绑定到字段的信息。


问题答案:

除了@jihor建议的JSON注释之外,您还可以尝试使用自定义Web数据绑定器,将以下代码添加到控制器或Controller
Advice
类中,以跨多个控制器扩展功能。

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.initDirectFieldAccess();
}


 类似资料:
  • 问题内容: 我有一个很长的页面,可在用户滚动浏览时动态加载图像。 但是,如果用户快速滚动离开页面的某个部分,我不希望图像继续加载到页面的该部分视图之外。 除了图像加载外,页面上还同时发生了许多其他请求,因此在scroll事件上触发钝化window.stop()是不可接受的。 我尝试删除并清除不再可见的图像的img src属性,但是,由于请求已经启动,因此图像会继续加载。 请记住,当用户短暂滚动经过

  • 问题内容: 在Mongoose的早期版本(针对node.js)中,可以选择使用它而不定义架构 但是在当前版本中,“ noSchema”功能已被删除。我的架构可能会经常更改,并且实际上不适合已定义的架构,因此,是否有一种新的方式在猫鼬中使用无架构的模型? 问题答案: 我想这就是您要寻找猫鼬严密的东西 选项:严格 严格选项(默认情况下启用)可确保未在架构中指定的添加到模型实例的值不会保存到数据库中。

  • 问题内容: 为了掌握AngularJS,我决定使用其中一个示例,特别是在Todo示例中简单地添加一个“ complete”屏幕,当用户输入5个todo时,它会使用一个切换案例切换到另一个div。 。如果有任何用处,可以在这里找到代码http://jsfiddle.net/FWCHU/1/。 但是,似乎每个开关盒都有其自己的作用域($ scope.todoText不可用),但是在这种情况下,可以使用

  • 我正在基于Tomcat servlet和NIO创建服务。输入时有大的XML请求(约100 MB),通过HTML POST方法发送。我只想流前8千磅,然后立即发送响应到客户端。 当我尝试发送小请求(内容中只有几行)时,套接字工作正常。 2016-02-01 10:44:52 Http11NioProtocol[DEBUG]套接字:[org.apache.tomcat.util.net.NioEndp

  • 问题内容: 如果我要使用DefaultServeMux(我将其指定为ListenAndServe的第二个参数来指定),那么我可以访问,您可以在Go Wiki的以下示例中看到该: 在当前代码中,我无法使用DefaultServeMux,即我将自定义处理程序传递给ListenAndServe 因此,我没有内置的代码。但是,我必须将一些授权代码修改为需要类似的授权代码。例如,如果我一直在使用Defaul

  • 我有一个具有两个属性的dynamoDB表: A: 主分区键 B: 主排序键 我想使用属性B查询这个表,因为我不知道A的值。可以这样做吗? 是否可以将B设为GSI(全局二级索引),如何使用B查询表,因为B已经是排序键。