Spring @PathVariable作为一年

Nic*_*ack 3 java spring spring-boot

我有一个端点是:

api/entities/{year}
Run Code Online (Sandbox Code Playgroud)

我的功能看起来像:

get(@PathVariable(name = "year") Year year)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试命中端点时,我希望得到一个错误,它无法从类型String转换为类型Year.我显然需要像@DateTypeFormat这样的东西,但这并没有真正起作用.

有没有办法将传入的值格式化为Year,或者我应该将我的API重新编写为不使用Year?

Jai*_*o99 7

你可以这样做:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

然后 在spring-context中注册它