繁体   English   中英

如何使用jersey客户端映射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,所以你需要创建一个OptionalLong你得到的:

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM