gpt4 book ai didi

java - Spring Boot中可以通过依赖注入(inject)来完成请求验证吗?

转载 作者:行者123 更新时间:2023-12-02 09:54:09 26 4
gpt4 key购买 nike

==背景==
我习惯了 Laravel 中提供的依赖注入(inject),您可以在其中创建一个扩展请求类的类,并将所有验证放入其中,然后在多个 Controller 方法中重新使用它。

==当前代码===
我目前正在尝试在 Java Spring Boot 中做一个项目,我的 Controller 方法现在如下所示:

    @RequestMapping("/list")
@ResponseBody
public DTResponse<Name> list(
@RequestParam(defaultValue = "0") int draw,
@RequestParam(defaultValue = "0") int start,
@RequestParam(defaultValue = "0") int length,
@RequestParam(name="search[value]", defaultValue = "") String search,
@RequestParam(name="columns[0][search][value]", defaultValue = "") String firstname,
@RequestParam(name="columns[1][search][value]", defaultValue = "") String lastname,
@RequestParam(name="order[0][column]", defaultValue = "0") int sortColumn,
@RequestParam(name="order[0][dir]", defaultValue = "asc") String sortOrder,
@CookieValue String language,
HttpServletResponse response,
HttpServletRequest request
)

并将其中的大部分转发给验证函数。

== future ==
我想用一个类替换大部分行,该类可以进行验证,并将一些请求参数抽象到方法中,因此它们可以轻松地在多种方法中重用。

==问题==
如何编写一个类,可以将其注入(inject)到 Controller 方法中,并运行验证,并具有可以解析请求参数的辅助方法?

==替代方案==
我可以构建一个静态函数来获取注入(inject)的请求参数、http-servlet 和 cookie 吗?

最佳答案

添加到@Antoniossss的答案...

@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;
}

您的命令对象可能如下所示。

注意

强烈建议对所有传入的值使用字符串,因为如果客户端提交的值与预期类型(int、float、boolean 等)不匹配,spring 将抛出一个您几乎无法控制的异常,并且该异常可能非常神秘。

所有值都可以作为 String 传入的默认类型,因此建议使用它作为最小公分母,然后检查输入的值是否可以转换为所需的类型,在本例中为 int/integer。

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

关于java - Spring Boot中可以通过依赖注入(inject)来完成请求验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56119624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com