2017-02-14 4 views
1

Я пытаюсь сделать мой сервер разобрать следующий JSON:Потребляя OffsetDateTime в Джерси

{"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`?

ответ

1

Если вы используете Джексона в качестве поставщика JSON, вам нужно jackson-datatype-jsr310 зависимость для поддержки OffsetDateTime:

<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-jsr310</artifactId> 
    <version>2.8.6</version> 
</dependency> 

Вы также хотите аннотировать TemperatureRegister поля с @JsonProperty, когда ваши имена полей класса не соответствуют JSON Имущественные названия:

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 
} 
+0

ЖИЗНЕННЫЙ СПАСАТЕЛЬ !!!!! он работал безупречно! –

+0

@filscapo Если мой ответ решил вашу проблему, пожалуйста, подумайте о том, чтобы принять его, щелкнув зеленый галочку рядом с моим ответом :) –

+1

OH !! tks для запоминания me =] –

Смежные вопросы