Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
使用Spring验证框架验证请求头_Spring_Validation_Spring Mvc_Bean Validation - Fatal编程技术网

使用Spring验证框架验证请求头

使用Spring验证框架验证请求头,spring,validation,spring-mvc,bean-validation,Spring,Validation,Spring Mvc,Bean Validation,是否可以将Spring验证框架与Spring MVC结合使用来验证HTTP请求头的存在和值?我看不出这是怎么可能的,因为验证框架只在域对象上运行,而不在HTTP请求本身上运行。具体地说,没有指定任何接受HttpServletRequest对象的方法,而HttpServletRequest对象正是您获取头并测试它们所需要的 对于您试图解决的任何问题,使用验证框架感觉都是错误的解决方案,特别是因为很难知道对于给定的表单提交,如何存在唯一的HTTP请求头。您是否希望测试应用程序请求中应始终存在的HTT

是否可以将Spring验证框架与Spring MVC结合使用来验证HTTP请求头的存在和值?

我看不出这是怎么可能的,因为验证框架只在域对象上运行,而不在HTTP请求本身上运行。具体地说,没有指定任何接受HttpServletRequest对象的方法,而HttpServletRequest对象正是您获取头并测试它们所需要的


对于您试图解决的任何问题,使用验证框架感觉都是错误的解决方案,特别是因为很难知道对于给定的表单提交,如何存在唯一的HTTP请求头。您是否希望测试应用程序请求中应始终存在的HTTP头?然后,您可能需要考虑实现一个将拦截和处理所有映射到任何映射的页面的请求。您是否希望测试应用程序的任何页面视图中应始终存在的HTTP头?然后,您需要实现一个在Spring MVC上下文之外运行的验证框架。

要检查请求头是否存在,您不需要验证框架。默认情况下,请求头参数是必需的,如果请求中缺少必需的头,SpringMVC会自动响应400个错误请求

所以下面的代码会自动检查是否存在标题“header Name”


要检查请求头的,可以使用Spring验证框架。要做到这一点,你需要

  • @Validated
    添加到控制器类。在实施之前,这是一个需要解决的问题
  • 将JSR-303注释添加到请求头参数,例如

    @RequestHeader("Header-Name") @Pattern(regexp = "[A-Za-z]*") String headerValue
    

  • 但是,请注意,如果标头值无效,这将导致500。请检查如何在这种情况下获得正确的状态代码(即400)。

    我们有一个自定义http客户端,它提交http头以识别自身。我认为handler拦截器是一个不错的选择。谢谢当标头缺少消息时,如字符串类型的方法参数缺少请求标头“header Name”,但当违反
    doAction.headerValue:时,必须匹配“[A-Za-z]*”
    ,因此写入变量名而不是标头名。是否可以显示标题名?
    @RequestHeader(name = "Header-Name", required = false)
    
    @RequestHeader("Header-Name") @Pattern(regexp = "[A-Za-z]*") String headerValue