gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:13 25 4
gpt4 key购买 nike

稍后编辑 2019-05-31

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

此问题在整个应用部署在 Apache TomEE 服务器中时出现。

<小时/>

稍后编辑:这不是注释放置的问题(在字段上还是在 getter 上),我尝试了各种组合(在 getter 上注释、在私有(private)字段上注释、在公共(public)字段上注释等...)

<小时/>

代码:

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方法从不被调用。

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

我做错了什么?

谢谢。

最佳答案

这可能与您放置在 getter 上的注释有关 - 您可能会移动它以反射(reflect)类似于的内容

public class Item {

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

// ...
}

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

关于java - JsonSerialize/JsonDeserialize 在 Apache Tomcat (TomEE) 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56359380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com