我有一个使用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 理想情况下,我想编写自定义表达式以提供例如如果未指定日期,则当前周开始或当月结束
答案 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")
捕获此方法并检查它是否具有所需的值,或者在运行时更改所需的值。