Spring MVC 可以将 HTTP 标头绑定到 Java 类吗?
我有三个标头,我想将它们编组为 POJO,就像您对表单或请求正文所做的那样。
我可以看到两种方法可以使用 Spring 和请求或原型范围的 bean 来实现这一点。
值得首先弄清楚bean 的不同范围以及 Spring 如何为不同范围创建代理(如果您还没有的话)。
第一种方法使用Spring 表达式语言直接引用当前的 HttpServletRequest 实例。
@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyClass
{
@Value({#request.getHeader('headerName')})
private String myHeaderValue;
public String getMyHeaderValue()
{
return myHeaderValue;
}
}
另一种方法是简单地将当前的 HttpServletRequest 作为构造函数参数注入:
@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyClass
{
private String myHeaderValue;
@Autowired
public MyClass(HttpServletRequest httpServletRequest)
{
this.myHeaderValue = httpServletRequest.getHeader("headerValue");
}
public String getMyHeaderValue()
{
return this.myHeaderValue;
}
}
然后,您可以根据需要将此 bean 注入您的 Controller 或 Service bean:
@Controller
public class MyController
{
@Autowired
private MyClass myClass;
}
任何一种方法都应该让您实现您想要的,您可以选择最适合您的要求和偏好的方法。