使用Spring有一种方法可以使用这样的代码:
@RequestMapping("/animals/view/*")
public ModelAndView view(@SomeKindOfAnnotation AnimalFilter filter) {
return new ModelAndView("myViewPage", "animals", animalService.filterBy(filter));
}
我想要这样的通话网址:
<myContextPath>/animals/view/
(提取所有动物)<myContextPath>/animals/view/type/cat
(仅提取猫)<myContextPath>/animals/view/type/cat/color/yellow
(仅提取棕色猫)<myContextPath>/animals/view/type/insect/legs/6
(仅提取6条腿的昆虫)并且对象animalFilter已经填充了包含在URL中的数据。
AnimalFilter是一个简单的POJO类,其中包含用于过滤器动物的每种类型字段的getter和setter。
如果没有办法,可以创建新的注释@SomeKindOfAnnotation
以自动填充AnimalFilter
吗?
答案 0 :(得分:1)
你可以做的是构建一个PropertyEditor,或者你可以使用像Jackson这样的对象映射器,如果你使用的是json值,但如果你真的想使用注释,你可以使用AOP:
使用AOP的例子:
@Before(value="@annotation(audit) && args(.......)")
public void beforeHandler(SomeKindOfAnnotation audit, .......) {
使用PropertiesEditor的示例:
public class SomeKindOfPropertie extends PropertiesEditor {
@Override
public void setAsText(String text) throws IllegalArgumentException {
// Reminding all parameters in the request are String.
.......
setValue(new SomeKind(text));
}
}
在您的控制器中,您需要在活页夹上注册propertiesEditor:
@InitBinder("filter")
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(SomeKind.class, new SomeKindOfPropertie());
}
更多信息: http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/validation.html