JsonSerialize / JsonDeserialize在Apache Tomcat(TomEE)中不起作用

时间:2019-05-29 11:18:43

标签: java json rest date jackson

最新版本编辑2019-05-31

如果我编写了一个示例main实例化一个Item然后调用String s = new ObjectMapper().writeValueAsString(item);的方法,则自定义序列化程序 被正确调用 并具有效果。

当整个应用程序部署在Apache TomEE服务器中时,只会出现问题


LATER EDIT :注解的放置(在字段上与getter上)不是问题,我尝试了各种组合(getter上的注释,私有字段,公共字段上的注释等)


代码:

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

问题

  • from what I know,日期的默认JSON输出格式应为时间戳。在我的情况下,不是,而是 yyyyMMddHHmmssZ
  • 自定义序列化程序无效,我无法更改日期的输出格式,并且 serialize 方法从不被调用。 / li>

我的 lib 文件夹中的jackson文件: jackson-annotations-2.8.0.jar,jackson-core-2.8.8.jar,jackson-databind-2.8.8.1.jar

我在做什么错了?

谢谢。

1 个答案:

答案 0 :(得分:0)

这可能与将注释放置在吸气剂上有关-您可以将其移动以反映类似于

的内容
public class Item {

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

   // ...
}

或者您必须将Jackson配置为仅使用getter进行序列化。