![](/img/trans.png)
[英]Java 8 java.util.Map#computeIfAbsent with java.util.Optional
[英]How to map java.util.Optional with jersey client
我有一个类型为java.util.Optional的字段的DTO,如下所示:
public class Person {
private final Optional<Long> id;
@JsonCreator
public Person(@JsonProperty("id") Long id) {
this.id = id;
}
public Optional<Long> id {
return this.id
}
}
如果我尝试以json格式序列化并通过jersey客户端发送它,服务器会抛出以下异常:
com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class java.util.Optional<java.lang.Long>] from Integral number (1); no single-int-arg constructor/factory method
可以在jersey客户端使用java.util.Optional吗?
谢谢。
json不包含一个可选项,它包含一个long,所以你需要创建一个Optional
的Long
你得到的:
@JsonCreator
public Person(@JsonProperty("id") Long id) {
this.id = Optional.ofNullable(id);
}
将jackson-datatype-jdk8
依赖项添加到pom.xml
:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.6.3</version>
</dependency>
创建一个ObjectMapper
实例并注册Jdk8Module
:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Jdk8Module());
然后在Client
实例中注册JacksonJsonProvider
:
Client client = ClientBuilder.newClient().register(new JacksonJsonProvider(mapper));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.