java – 自定义WebArgumentResolver,如@PathVariable

前端之家收集整理的这篇文章主要介绍了java – 自定义WebArgumentResolver,如@PathVariable前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用自定义WebArgumentResolver作为id – >实体.如果我使用请求参数,则足够简单:使用参数键确定实体类型并相应地查找.

但我希望它像@PathVariable注释.

例如.

http://mysite.xzy/something/enquiryId/itemId将触发此方法

@RequestMapping(value = "/something/{enquiry}/{item}")
public String method(@Coerce Enquiry enquiry,@Coerce Item item)

@Coerce注释会告诉WebArgumentResolver根据它的类型使用特定服务.

问题在于哪个uri部分属于实体.

有人可以解释PathVariable注释如何做到这一点.是否可以使用我的自定义注释来模拟它.

谢谢.

解决方法

您可以使用 @InitBinder 让spring知道如何将给定的String强制转换为您的自定义类型.

你想要的东西是这样的:

@RequestMapping(value = "/something/{enquiry}")
public String method(@PathVariable Enquiry enquiry) {...}


@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Enquiry.class,new PropertyEditorSupport() {
        @Override
        public String getAsText() {
            return ((Enquiry) this.getValue()).toString();
        }

        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            setValue(new Enquiry(text));
        }
    });
}

猜你在找的Java相关文章