当前位置: 首页 > 知识库问答 >
问题:

带有YearMonth值的Spring MVC中的@Request estParam注释

戎鹏云
2023-03-14

我正在尝试获取以下格式“2018-01”的查询参数,以用作YearMonth(java.time)对象。

在我的控制器中,我有以下参数:

@RequestParam(value = "start") @DateTimeFormat(pattern = "yyyy-MM") YearMonth start

但我得到以下错误:未能将类型[java.lang.字符串]的值转换为所需的类型[java.time.YearMonth];嵌套异常java.lang.IllegalStateException:无法将类型[java.lang.字符串]的值转换为所需的类型[java.time.YearMonth]:没有找到匹配的编辑器或转换策略

编辑:
根据此链接:https://jira.spring.io/browse/SPR-13518,java。时间自版本4.2.4以来,支持YearMonth转换,我使用的是spring版本4.3.3。发布

共有1个答案

常翰
2023-03-14

不知道@DateTimeFormatter注释是否支持YearMonth进行隐式转换。但是

您可以始终为此YearMonth类型注册自定义转换器,如下所示:

@Configuration
@EnableMvc 
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new YearMonthConverter());
    }
}

将您的YearMonthConverter定义为:

public class YearMonthConverter implements Converter<String, YearMonth> {

    @Override
    public YearMonth convert(String text) {
        return YearMonth.parse(text, DateTimeFormatter.ofPattern("yyyy-MM"));
    }
}

在这里,您可以确保隐式转换。

 类似资料:
  • 我正在使用Lombok注释,但我希望一些字段是可选的,并默认为,以避免NPE。有没有一个简单的方法可以做到这一点?我什么也找不到。 或者,一种自定义的方法,用于在变量为时返回默认值。

  • 问题内容: 我有一个变量: 例如,在里面站立。 我希望它仍然是YearMonth,但是使用(请注意,没有“-”分隔符),或者甚至更好,那就是意大利语Locale。 怎么做? 更新 我尝试了JackDaniels的方法。它实际上可以工作,因为它为我提供了具有正确日期格式的string()。但是我需要将该字符串再次放入YearMonth变量中。我尝试了: 但它返回了一个错误: 我该如何解决? 问题答案

  • 如何在我的建议中获得注释参数的值。我有如下场景: 我希望为所有具有@Custom注释的方法定义切入点,这里没有什么花哨的。问题是我想在建议中获取用@Param标记的参数和注释本身的值。这种带注释的参数的数量不是固定的,可以有任何数量,也可以根本没有。 到目前为止,我已经使用了反射,我能够获取带有注释的参数,但不能获取注释的值。

  • 我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现

  • 我使用JAXB从Java类生成XML模式(XSD)。我想知道如何使用注释来指定一个静态属性的值。 例如,我定义了一个如下所示的属性 我想在我的XSD中

  • 我正在尝试创建一个查询并根据自定义权重计算对其进行排序。 我需要一些帮助作为解决方案我来确实工作但性能是不是在那里我想它是 我拥有的是一个媒体对象。它有相关的评论、喜欢和命令。 以下查询目前有效,但完全是一团乱麻: 如您所见,我正在单独注释我将使用的所有参数,然后对查询集中的每个项目进行愚蠢的遍历,这是非常次优的。 我尝试做的一件事是: 但是注释中的类似操作是不可能的(尝试了一些有和没有Sum()