java - Spring @PathVariable 作为一年

标签 java spring spring-boot

我有一个端点是:

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-context 中注册它

关于java - Spring @PathVariable 作为一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49859241/

相关文章:

java - 我想在我的 android 代码中实现记住我的功能,但我不知道从哪里开始

java - 尝试在空对象引用上调用虚拟方法 'int com.yinkyade.scheduler.model.User.getId()'

java - 如何基于StoredProcedureQuery结果列表构造JSON对象-SpringBoot Rest API?

java - Maven 测试范围

java - 如何模拟 bean 并避免 NoUniqueBeanDefinitionException

json - 我希望我的 controlleradvice 在处理异常时总是产生 JSON

java - 使用 Oracle Wallet 身份验证从 Spring-jdbc 连接到 Oracle DB

java - 使用 Spring 在后台运行进程的推荐方法是什么?

spring-boot - JBAS015852 : Could not index class module-info. 类 - Spring Boot + Jboss 7.1.1

java - Android 应用因侵犯用户隐私而从 Play 商店下架