Java Spring@PathVariable作为一年
我有一个端点是:Java Spring@PathVariable作为一年,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个端点是: api/entities/{year} 我的函数如下所示: get(@PathVariable(name = "year") Year year) 但是,当我尝试到达端点时,我预期会得到一个错误,它无法从类型String转换为类型Year。我显然需要@DateTypeFormat之类的格式,但这并不能真正起作用 有没有一种方法可以将传入值格式化为一年,或者我应该修改API以不使用一年 您可以将其作为字符串接受,并在点击端点后尝试转换?您可以执行以下操作: public cl
api/entities/{year}
我的函数如下所示:
get(@PathVariable(name = "year") Year year)
但是,当我尝试到达端点时,我预期会得到一个错误,它无法从类型String转换为类型Year。我显然需要@DateTypeFormat之类的格式,但这并不能真正起作用
有没有一种方法可以将传入值格式化为一年,或者我应该修改API以不使用一年 您可以将其作为
字符串接受,并在点击端点后尝试转换?您可以执行以下操作:
public class YearHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.getParameterType().equals(Year.class);
}
@Override
public Object resolveArgument(MethodParameter methodParameter,
ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest,
WebDataBinderFactory webDataBinderFactory) throws Exception {
final String yearFromPath = nativeWebRequest.xxx();
return Year.from(yearFromPath);
}
}
然后
在您的spring上下文中注册它一个简单的方法是接受一个整数
,如果您确实需要一个年份
类型,则将其转换
您可以注册自己的HandlerMethodArgumentResolver
来为您进行转换,尽管在这种情况下,它看起来像是太多的锅炉板,但它更优雅
另一种可能是将其作为日期处理,转换是免费的:
@PathVariable(name=“year”)@DateTimeFormat(pattern=“yyyy”)日期日期日期
您可以稍后以您喜欢的形式提取年份值。我的猜测是,当您调用api时,它会收到一个字符串
,并尝试将其映射到年份
Year
没有使用字符串的构造函数,因此它可能会失败?也许这可以帮助您:您可以将其作为String
接受,并在端点被命中后尝试转换?我建议您看看这篇文章:既然您不明确,这是java.time.Year
?Spring现在应该支持OOTB,如果它不支持,您应该提交一个特性请求。IMHO,这应该是可以接受的答案。另一个答案更像是一种变通方法。