Spring MVC:带有最终变量的@Value注释

Posted

技术标签:

【中文标题】Spring MVC:带有最终变量的@Value注释【英文标题】:Spring MVC: @Value annotation with final variable 【发布时间】:2015-03-13 09:29:02 【问题描述】:

我有一个 config.properties 文件:

date_format="yyyy-MM-dd"

我的springmvc-servlet.xml:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:config/config.properties</value>
        </list>
    </property>
</bean>

这是我的控制器类:

@Controller
@RequestMapping("/T")
public class Test extends BaseController

    @Value("$date_format")
    private static final String format; // Here, I want a final String as a constant

    @RequestMapping(value = "t2")
    @ResponseBody
    public String func(@RequestParam("date") @DateTimeFormat(pattern = format) Date date)
    
        return date.toString();
    

我想在一个final变量上使用@Value注解,这个注解用在@DateTimeFormat注解中。

@DateTimeFormat 需要一个最终的字符串变量,这就是我需要在最终变量上使用@Value 的原因。但它目前不起作用。有什么想法吗?

【问题讨论】:

您的日期格式是否经常变化,以至于您需要在属性文件中对其进行配置? 为什么要注入静态字段?请参阅***.com/questions/10938529/… 了解不这样做的原因。 【参考方案1】:

我回答了这样的问题 https://***.com/questions/7130425...

我会删除静态修饰符并执行类似的操作:

@Controller
@RequestMapping("/T")
public class Test extends BaseController

   @Value("$date_format")
   private final String format; // Removed static

   public Test (@Value("$date_format") format)
     this.format = format;
   

   @RequestMapping(value = "t2")
   @ResponseBody
   public String func(@RequestParam("date") @DateTimeFormat(pattern = format) Date date)
     return date.toString();
   

这被称为Constructor Injection。

【讨论】:

以上是关于Spring MVC:带有最终变量的@Value注释的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 在带有点的 URL 上返回 HTTP 406

Spring MVC 使用矩阵变量绑定参数

Spring MVC 缺少 URI 模板变量

Spring MVC 从 RequestMapping 引用 params 变量

我可以在 Spring MVC 的 RequestMapping 中为路径变量设置默认值吗?

Spring Web MVC:对请求参数和路径变量使用相同的请求映射