JsonSerialize / JsonDeserialize не работает в Apache Tomcat (TomEE) - PullRequest
1 голос
/ 29 мая 2019

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ 2019-05-31

Если я напишу образец main метода, который создает экземпляр Item, а затем вызывает String s = new ObjectMapper().writeValueAsString(item);, тогдаНастраиваемый сериализатор называется правильно и действует.

Проблема only появляется, когда все приложение развернуто на сервере Apache TomEE.


ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ : это не проблема с размещением аннотации (на поле и на геттер), я пробовал различные комбинации этого (аннотация на геттер), аннотация на приватное поле, аннотация на публичное поле и т.д ...)


Код:

import com.fasterxml.jackson....
// YES, all JSON-related stuff is from fasterxml

@JsonAutoDetect
public class Item {
    private Date lastModified;

    @JsonSerialize(using = CSer.class)
    public Date getLastModified() {
        return lastModified;
    }

    public class CSer extends JsonSerializer<Date> {
        public SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

        @Override
        public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers)
                throws IOException, JsonProcessingException {
            gen.writeString(dateFormat.format(value));
        }
    }
}

// some place else, in a REST service class
    ...
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getItems(... {
        ...
        return Response.ok(result.getData()).build();
        // result.getData() is an ArrayList of "Item" objects.
    }

ВОПРОСЫ :

  • из того, что я знаю , формат вывода даты в формате JSON по умолчанию должен быть отметкой времени.В моем случае это не , а ггггМмддччммссZ
  • пользовательский сериализатор не действует , я не могу изменить формат вывода датыи метод serialize никогда не вызывается.

Файлы Джексона в моей папке lib : jackson-annotations-2.8.0.jar, jackson-core-2.8.8.jar, jackson-databind-2.8.8.1.jar .

Что я делаю не так?

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2019

Возможно, это связано с размещением аннотации на геттере - вы можете переместить ее, чтобы отразить что-то похожее на

public class Item {

    @JsonSerialize(using = CSer.class)
    private Date lastModified;

   // ...
}

или вам нужно настроить Джексона на использование только геттеров для сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...