使用Spring验证框架验证请求头
是否可以将Spring验证框架与Spring MVC结合使用来验证HTTP请求头的存在和值?我看不出这是怎么可能的,因为验证框架只在域对象上运行,而不在HTTP请求本身上运行。具体地说,没有指定任何接受HttpServletRequest对象的方法,而HttpServletRequest对象正是您获取头并测试它们所需要的使用Spring验证框架验证请求头,spring,validation,spring-mvc,bean-validation,Spring,Validation,Spring Mvc,Bean Validation,是否可以将Spring验证框架与Spring MVC结合使用来验证HTTP请求头的存在和值?我看不出这是怎么可能的,因为验证框架只在域对象上运行,而不在HTTP请求本身上运行。具体地说,没有指定任何接受HttpServletRequest对象的方法,而HttpServletRequest对象正是您获取头并测试它们所需要的 对于您试图解决的任何问题,使用验证框架感觉都是错误的解决方案,特别是因为很难知道对于给定的表单提交,如何存在唯一的HTTP请求头。您是否希望测试应用程序请求中应始终存在的HTT
对于您试图解决的任何问题,使用验证框架感觉都是错误的解决方案,特别是因为很难知道对于给定的表单提交,如何存在唯一的HTTP请求头。您是否希望测试应用程序请求中应始终存在的HTTP头?然后,您可能需要考虑实现一个将拦截和处理所有映射到任何映射的页面的请求。您是否希望测试应用程序的任何页面视图中应始终存在的HTTP头?然后,您需要实现一个在Spring MVC上下文之外运行的验证框架。要检查请求头是否存在,您不需要验证框架。默认情况下,请求头参数是必需的,如果请求中缺少必需的头,SpringMVC会自动响应400个错误请求 所以下面的代码会自动检查是否存在标题“header Name”
要检查请求头的值,可以使用Spring验证框架。要做到这一点,你需要
@Validated
添加到控制器类。在实施之前,这是一个需要解决的问题@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