Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 请求验证可以在spring boot中通过依赖项注入完成吗?_Java_Spring_Spring Boot - Fatal编程技术网

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