在泽西岛消费 OffsetDateTime
Consuming OffsetDateTime in Jersey
我试图让我的服务器解析以下 JSON:
{"hardwareId":1,"registerTime":"2017-02-14T03:42:11.482Z","sensorId":1,"temperature":23.6}
registerTime
属性 必须解析为 OffsetDateTime
实例:
@XmlRootElement
public class TemperatureRegister {
private int m_hardwareId;
private int m_sensorId;
private OffsetDateTime m_registerTime;
private double m_temperature;
public TemperatureRegister() {
}
public TemperatureRegister(OffsetDateTime p_registerTime, double p_temperature,
int p_hardwareId, int p_sensorId) {
if (p_registerTime == null) {
this.m_registerTime = OffsetDateTime.now(ZoneOffset.UTC);
}
this.m_registerTime = p_registerTime;
this.m_temperature = p_temperature;
this.m_hardwareId = p_hardwareId;
this.m_sensorId = p_sensorId;
}
...
}
我的资源方法就是这样定义的:
@POST
@Path("/insert")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public TemperatureRegister addOne(TemperatureRegister p_register) {
m_mongoConnector.InsertOne(p_register);
return p_register;
}
由于某些原因,在上面的方法中,p_register
参数总是这样:
TemperatureRegister [m_hardwareId=1, m_sensorId=1, m_registerTime=null, m_temperature=23.6]
它正确地映射了所有内容,但 registerTime
是 OffsetDateTime
。总是 null
。为什么这是唯一有问题的值?
我是不是做错了什么?是否需要一些特殊配置来处理 OffsetDateTime?
如果您使用 Jackson 作为 JSON 提供商,您需要 jackson-datatype-jsr310
dependency to support OffsetDateTime
:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.6</version>
</dependency>
当您的 class 字段名称与 JSON 属性 名称不匹配时,您还想用 @JsonProperty
注释 TemperatureRegister
字段:
public class TemperatureRegister {
@JsonProperty("hardwareId")
private int m_hardwareId;
@JsonProperty("sensorId")
private int m_sensorId;
@JsonProperty("registerTime")
private OffsetDateTime m_registerTime;
@JsonProperty("temperature")
private double m_temperature;
// Constructor, getters and setters omitted
}
我试图让我的服务器解析以下 JSON:
{"hardwareId":1,"registerTime":"2017-02-14T03:42:11.482Z","sensorId":1,"temperature":23.6}
registerTime
属性 必须解析为 OffsetDateTime
实例:
@XmlRootElement
public class TemperatureRegister {
private int m_hardwareId;
private int m_sensorId;
private OffsetDateTime m_registerTime;
private double m_temperature;
public TemperatureRegister() {
}
public TemperatureRegister(OffsetDateTime p_registerTime, double p_temperature,
int p_hardwareId, int p_sensorId) {
if (p_registerTime == null) {
this.m_registerTime = OffsetDateTime.now(ZoneOffset.UTC);
}
this.m_registerTime = p_registerTime;
this.m_temperature = p_temperature;
this.m_hardwareId = p_hardwareId;
this.m_sensorId = p_sensorId;
}
...
}
我的资源方法就是这样定义的:
@POST
@Path("/insert")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public TemperatureRegister addOne(TemperatureRegister p_register) {
m_mongoConnector.InsertOne(p_register);
return p_register;
}
由于某些原因,在上面的方法中,p_register
参数总是这样:
TemperatureRegister [m_hardwareId=1, m_sensorId=1, m_registerTime=null, m_temperature=23.6]
它正确地映射了所有内容,但 registerTime
是 OffsetDateTime
。总是 null
。为什么这是唯一有问题的值?
我是不是做错了什么?是否需要一些特殊配置来处理 OffsetDateTime?
如果您使用 Jackson 作为 JSON 提供商,您需要 jackson-datatype-jsr310
dependency to support OffsetDateTime
:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.6</version>
</dependency>
当您的 class 字段名称与 JSON 属性 名称不匹配时,您还想用 @JsonProperty
注释 TemperatureRegister
字段:
public class TemperatureRegister {
@JsonProperty("hardwareId")
private int m_hardwareId;
@JsonProperty("sensorId")
private int m_sensorId;
@JsonProperty("registerTime")
private OffsetDateTime m_registerTime;
@JsonProperty("temperature")
private double m_temperature;
// Constructor, getters and setters omitted
}