2015-12-02 42 views
2

Spring存在问题,并将请求标头名称值注入控制器。
下面是代码:Spring - 请求标头名称的注入值

@Controller 
public class ApiController { 

    @Value("${param.header_name}") 
    private String param; 

    @RequestMapping(value = "/**") 
    public void handleApiRequest(final HttpServletRequest request, final HttpServletResponse response, 
     @RequestHeader(value = param) final String param) 

属性使用@PropertySourcePropertySourcesPlaceholderConfigurer定义。

的问题是:

“用于注释属性的值RequestHeader.value必须是 常量表达式”。

但是不可能将值注入常量(最终静态)字段。有没有解决方法?我想使用RequestHeader注释/映射和属性文件来定义标题名称。在注释中使用

+0

不,你无法为Spring bean的成员变量分配一个动态值 - 为什么你会希望发生这种情况? 如果你在'handleApiRequest()'方法中需要这个头部变量,你可以使用'request.getHeader(header_name)'从request中检索它。你为什么要在你的'@ Value'属性中使用它? – Alexander

+0

嗨@Fazovsky,看看这个线程:http://stackoverflow.com/questions/6897201/an-alternative-to-value-annotation-in-static-function – SyntaX

+0

@亚历山大我认为RequestHeader注释更干净,然后请求.getHeader(...) – FazoM

回答

1

值必须在编译时解析,但param的价值只能在运行时确定

我看到的唯一解决方案是使用HttpServletRequest.getHeader(String)

String headerValue = request.getHeader(param); 
+0

好的。我认为这是唯一的方法。 – FazoM

+1

@Fazovsky好吧,如果你想玩,你可以尝试重写'RequestHeaderMethodArgumentResolver.resolveName(...)'方法';)' – sp00m