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

在spring中向消息转换器添加LocalDate映射器

汝承载
2023-03-14

有人能帮我一下吗?

我需要将Java8LocalDate转换为JSON,反之亦然,在我的REST应用程序中,我将调用REST API的MVC应用程序。由于默认JacksonJAXbJSONProvider不解析LOcalDate,所以我编写了如下所示的自定义映射器,并在pom.xml中添加了依赖项

public class LocalDateObjectMapperContextResolver implements ContextResolver<ObjectMapper>{
private final ObjectMapper MAPPER;

public LocalDateObjectMapperContextResolver() {
    MAPPER = new ObjectMapper();
    MAPPER.registerModule(new JavaTimeModule());
    //MAPPER.findAndRegisterModules();
    MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}

@Override
public ObjectMapper getContext(Class<?> type) {
    return MAPPER;
}

}

这是在Java 8 LocalDate Jackson格式中提出的

我需要将它传递给spring.xml中的消息转换器。

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
              p:objectMapper-ref="objectMapper"/>
    </mvc:message-converters>
</mvc:annotation-driven>
<mvc:annotation-driven >
    <mvc:message-converters register-defaults="false">
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
             <!--  p:objectMapper-ref="objectMapper"/> -->
             <property name="objectMapper" ref="localDateMapper" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

这显然是不正确的,因为我在需要映射器的地方传递了解析器。如何调用自定义类的getContext()方法并在消息转换器中进行设置?现在,它在创建名为'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0'的bean时开始抛出异常:无法创建类型为[org.springframework.http.converter.json.mappingJacksonHttpMessageConverter]的内部bean'org.springframework.web.servlet.mvc.method.annotation.requestMappingHandlerAdapter#0'而设置键为[0]的bean属性“Message Converters”;嵌套异常是org.springframework.beans.factory.beanCreationException:创建ServletContext资源[/WEB-INF/spring.xml]中定义的名为'org.springframework.http.converter.json.mappingJacksonHttpMessageConverter#0'的bean时出错:bean初始化失败;嵌套异常是org.springframework.beans.conversionNotSupportedException:未能将类型“****Package***.LocalDateObjectMapperContextResolver”的属性值转换为属性“Object Mapper”所需的类型“org.codehaus.jackson.map.ObjectMapper”;嵌套异常是java.lang.IllegalStateException:无法将类型[****Package***.LocalDateObjectMapperContextResolver]的值转换为属性“Object Mapper”所需的类型[org.codehaus.jackson.map.ObjectMapper]:找不到匹配的编辑器或转换策略

共有1个答案

焦苏燕
2023-03-14

您只需要自定义模块,而不需要映射器。然后相应地配置spring:

<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
      p:simpleDateFormat="yyyy-MM-dd"
      p:modulesToInstall="your.module.JavaTimeModule"/>

<bean id="xmlMapper" parent="objectMapper" p:createXmlMapper="true"/>

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper" ref="objectMapper"/>
        </bean>
        <bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter">
            <property name="objectMapper" ref="xmlMapper"/>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>
 类似资料:
  • 我想把我的spring web应用程序替换成使用spring boot的版本,并拥有不同于常规的web-app目录。(src/main/webapp->src/main/其他名称) Before:它具有默认servlet的servlet上下文配置。

  • 以下示例适用于请求,但不适用于。我的目标是让spring自动从input(请求正文和查询参数)解析: 作品: POSTlocalhost:8080/datetime 但GET也不适用: 获取localhost:8080/datetime?日期=2022-02-02 结果: org.springframework.web.bind.support.WebExchangeBindException:方

  • 我在使用spring-jms模块转换来自RabbitMQ的消息时遇到了一些问题。以前,我使用Rest APIendpoint发送消息,该endpoint将消息发送到RabbitMQ队列,并使用@JMSListener方法处理它。 在内部,这种行为添加了一个字段来确定Java类型,由Spring库管理。但是,现在我想避免Rest API调用,因为它不是必需的,而且我可以直接将消息发送到RabbitM

  • 问题内容: 我搜索了以下问题,但找不到答案。 我想通过编写实现 org.springframework.core.convert.converter.Converter的 自定义转换器来使用spring的转换服务。 然后我添加我的自定义转换器,如下所示: 执行上述操作时,我的应用程序初始化失败,因为我要覆盖bean conversionService并仅注册我的自定义转换器。 我如何才能不覆盖co

  • 使用MVC Java编程配置方式时,如果你想替换Spring MVC提供的默认转换器,完全定制自己的HttpMessageConverter,这可以通过覆写configureMessageConverters()方法来实现。如果你只是想定制一下,或者想在默认转换器之外再添加其他的转换器,那么可以通过覆写extendMessageConverters()方法来实现。 下面是一段例子,它使用定制的Ob

  • 因此,当我将对象转换为JSON字符串时: dob以以下方式写入JSON字符串: “dob”:{“年份”:1964,“月份”:“二月”,“纪年”:{“日历类型”:“ISO8601”,“ID”:“ISO”},“月份值”:2,“DayofMonth”:13,“DayofWeek”:“星期四”,“Era”:“CE”,“DayofYear”:44,“LeapYear”:true 所以,我不知道我是如何做到这