Проблемы с форматом даты в Джерси и Джексоне - PullRequest
0 голосов
/ 05 марта 2019

У меня возникли проблемы с десериализацией даты JSON с Джерси и Джексоном.

У меня есть класс, например: Элемент:

public class Item {
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private Date itemDate;

    // other String values and getters/setters
}

Конечная точка выглядит следующим образом:

@Path("/createItem")
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes(MediaType.APPLICATION_JSON)
public Response newItem(Item i) {
    System.out.println(i.getItemDate());
}

Если я POST следующие JSON-данные

{
    "itemDate": "2015-03-01"
}

i.getItemDate() всегда возвращает ноль.Если я не использую формат даты по умолчанию yyyy-MM-dd'T'HH:mm:ss.SSS'Z', я пытался изменить формат на yyyy-MM-dd, но я не могу этого сделать.Я попробовал @JsonDeserialize с пользовательским классом в соответствии с примерами на этом сайте.

Стоит также отметить, что при использовании пользовательского @JsonDeserializer он никогда не достигнет какой-либо точки останова в пользовательском классе, как это былоигнорируя аннотации, например:

 @JsonDeserialiser(using = MyCustomDateFormat.class) 

Если у меня есть точка останова в CustomJsonDateDeserializer, она никогда не попадет.

public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
    @Override
    public Date deserialize(JsonParser jsonParser,
                            DeserializationContext deserializationContext) throws IOException {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String date = jsonParser.getText();
        try {
            return format.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }

    }
}

Нужно ли что-то еще делать для регистрации обработчика десериализации,или он должен работать с одним из подходов выше?

...