gpt4 book ai didi

Spring Rest Controller 使用 Jackson 处理 java.util.Optional

转载 作者:行者123 更新时间:2023-12-04 18:05:31 42 4
gpt4 key购买 nike

我有 Spring RestController 类来使用 JSON 处理休息服务。对于 JSON,我使用的是 jackson 。有 java.util.Optional 类型的字段

 private Optional<Long> start = Optional.empty();

为了启用 Optional 类型的处理,我将 Spring 配置如下
 <bean id="objectMapper"  class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="modulesToInstall" value="com.fasterxml.jackson.datatype.jdk8.Jdk8Module" />
</bean>

但是,当我调用 Web 服务时,它无法通过以下消息反序列化可选类型
org.springframework.http.converter.HttpMessageNotReadableException: 
Could not read JSON: Can not instantiate value of type
[simple type, class java.util.Optional<java.lang.Long>]
from Long integral number (3424323423432); no
single-long-arg constructor/factory method

从独立代码进行序列化/反序列化工作正常。在那里我使用以下代码直接注册模块
    ObjectMapper m = new ObjectMapper();
m.registerModule(new Jdk8Module());

我正在使用的版本:

Spring :4.1.5.RELEASE

jackson :2.5.1

提前致谢

最佳答案

如果您使用的是最新版本的 Spring-boot,那么您可以通过在 pom 文件中添加以下依赖项来实现此目的

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>

Spring blog says :

Some well known Jackson modules are automatically registered if they are detected on the classpath:

  • jackson-datatype-jdk7: Java 7 types like java.nio.file.Path (as of 4.2.1 release)
  • jackson-datatype-joda: Joda-Time types
  • jackson-datatype-jsr310: Java 8 Date & Time API data types
  • jackson-datatype-jdk8: other Java 8 types like Optional (as of 4.2.0 release)


如果您想在代码中使用映射器,请自动连接 JacksonObjectMapper。
@Autowired
private ObjectMapper jacksonObjectMapper;

然后使用上面 Spring 容器的 mapper 实例将 Object 转换为 String
jacksonObjectMapper.writeValueAsString(user);

关于Spring Rest Controller 使用 Jackson 处理 java.util.Optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385984/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com