Java 请求验证可以在spring boot中通过依赖项注入完成吗?
==背景==Java 请求验证可以在spring boot中通过依赖项注入完成吗?,java,spring,spring-boot,Java,Spring,Spring Boot,==背景== 我已经习惯了Laravel中提供的依赖注入,您可以创建一个扩展请求类的类,并将所有验证放在其中,然后在多个控制器方法中重复使用它 ==当前代码=== 我目前正尝试在Java Spring Boot中执行一个项目,我的控制器方法如下所示: @RequestMapping(“/list”) @应答器 公众回应名单( @RequestParam(defaultValue=“0”)int draw, @RequestParam(defaultValue=“0”)int start, @Re
我已经习惯了Laravel中提供的依赖注入,您可以创建一个扩展请求类的类,并将所有验证放在其中,然后在多个控制器方法中重复使用它 ==当前代码===
我目前正尝试在Java Spring Boot中执行一个项目,我的控制器方法如下所示:
@RequestMapping(“/list”)
@应答器
公众回应名单(
@RequestParam(defaultValue=“0”)int draw,
@RequestParam(defaultValue=“0”)int start,
@RequestParam(defaultValue=“0”)整数长度,
@RequestParam(name=“search[value]”,defaultValue=“”)字符串搜索,
@RequestParam(name=“columns[0][search][value]”,defaultValue=“”)字符串firstname,
@RequestParam(name=“columns[1][search][value]”,defaultValue=“”)字符串lastname,
@sortColumn中的RequestParam(name=“order[0][column]”,defaultValue=“0”),
@RequestParam(name=“order[0][dir]”,defaultValue=“asc”)字符串排序器,
@CookieValue字符串语言,
HttpServletResponse,
HttpServletRequest请求
)
并将其中大部分转发给验证函数
==未来==我想用一个类来替换大多数行,这个类可以进行验证,并将一些请求参数抽象到方法中, 因此,它们很容易在多种方法上重用 ==问题==
如何编写一个可以注入控制器方法中的类,并运行验证,以及具有可以解析请求参数的帮助器方法 ==备选方案==
我是否可以构建一个静态函数,用于获取注入的请求参数、http servlet和cookie?是的,您只需在参数上使用
@Valid
注释即可调用内置验证或自定义验证。
检查官方文件
要添加到@Antoniosss的答案中
@Valid
注释就是这里的方法
这里有一个小例子
@ModelAttribute("command")
public DTRequest setupCommand() {
return new DTRequest;
}
@RequestMapping(value = "/list")
@ResponseBody
public DTResponse<Name> list(@ModelAttribute("command") @Valid DTRequest request, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
DTResponse<Name> response;
if (bindingResult.hasErrors()) {
// Do something here to let the client know that something went wrong.
// You can throw and exception and catch it one way or another...
} else {
// Do your real work here...
}
return response;
}
注意到所有@modeldattribute方法都被执行,而不仅仅是我注入的方法。所有
@modeldattribute
注释将针对每个控制器的所有@RequestMapping
注释执行。我认为这是一个很好的副作用,因为它让我验证我只在一个控制器中拥有我需要的东西。但是,另一方面,也可能存在控制器传播,这是一些人不喜欢的。顺便说一句,术语注入实际上是指在特定控制器创建时被“注入”的控制器的依赖关系。也就是说,spring在创建时将传递给控制器的构造函数或setter方法的所有内容。@modeldattribue
注释更像是ModelAndView
或“HttpServletRequest”对象,我们将返回值传递给将显示返回对象的视图。
public class DTRequest {
@Digits
private String draw = "0";
@Digits
private String start = "0";
@Digits
private String length = "0";
// etc... per field.
// Setters and getters...
public void setDraw(String draw) {
this.draw = draw;
}
public String getDraw() {
return this.draw;
}
public int getDrawAsInt() {
return Integer.valueOf(this.draw);
}
// etc... per setters and getters...
}