如何为@RequestParam的defaultValue提供表达式

时间:2015-05-08 11:36:59

标签: java spring spring-mvc

我有一个使用RequestParam的控制器。喜欢这个

@RequestMapping("/hello")
public ModelAndView process(
        @RequestParam(value = "startDate", 
                      required = false, 
                      defaultValue="yesterday()") startDate)

如果未指定startDate,则使用defaultValue。但就我而言,价值应该是动态的,例如: now()yesterday()。有没有办法指定一个表达式,例如类的方法返回值?

我懒得到处使用这样的代码

startDate=startDate!=null ? startDate : new Date()

UPDATE 理想情况下,我想编写自定义表达式以提供例如如果未指定日期,则当前周开始或当月结束

2 个答案:

答案 0 :(得分:3)

在此解释https://stackoverflow.com/a/22523299/636472

您可以通过为特殊字词创建行为来处理您的案例:

@InitBinder
public void initBinder(WebDataBinder binder) throws Exception {
    final DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    final CustomDateEditor dateEditor = new CustomDateEditor(df, true) {
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            if ("today".equals(text)) {
                setValue(new Date());
            } else {
                super.setAsText(text);
            }
        }
    };
    binder.registerCustomEditor(Date.class, dateEditor);
}
@RequestParam(required = false, defaultValue = "today") Date startDate

答案 1 :(得分:0)

defaultValue 必须是final static表达式。 但是,您可以使用自定义注释来执行此操作。

e.g。

创建自定义注释@customAnno将此注释应用到您想要的方法。

使用方面@before("@customAnno")捕获此方法并检查它是否具有所需的值,或者在运行时更改所需的值。