这个问题和这个问题很相似,但是我不知道从哪里开始。
假设我有这样一个动作:
@GetMapping("/foo/{id}")
public Collection<Foo> listById(@PathVariable("id") string id) {
return null;
}
如何截取listById
方法并更改id
的值(例如:连接字符串、用零填充等)?
我的场景是大多数ID都是用零填充的(长度不同),我不想把这个留给我 AJAX 调用。
预期解决方案:
@GetMapping("/foo/{id}")
public Collection<Foo> listById(@PathVariablePad("id", 4) string id) {
// id would be "0004" on "/foo/4" calls
return null;
}
3条答案
按热度按时间t1qtbnec1#
好吧,我是这么做的。
由于我们不能继承注解,因此
@PathVariable
的目标只是参数,我们必须创建一个新的注解,如下所示:现在我们需要创建一个
HandlerMethodArgumentResolver
,在本例中,由于我只需要在@PathVariable
中左填充0,我们将继承PathVariableMethodArgumentResolver
,如下所示:最后,让我们注册方法参数解析器(xml):
用法非常简单,下面是如何做到这一点:
fnx2tebb2#
Spring
@InitBinder
注解和WebDataBinder
类将帮助您在控制器方法调用之前拦截参数并处理其值。文件:
完整代码模式:
和用法:
回复:
hrysbysz3#
这非常相似,但用于解码@PathVariable值,如@yanefedor所带来的,但应用于应用程序中的所有控制器: