最新版本编辑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.
}
问题:
我的 lib 文件夹中的jackson文件: jackson-annotations-2.8.0.jar,jackson-core-2.8.8.jar,jackson-databind-2.8.8.1.jar 。
我在做什么错了?
谢谢。
答案 0 :(得分:0)
这可能与将注释放置在吸气剂上有关-您可以将其移动以反映类似于
的内容public class Item {
@JsonSerialize(using = CSer.class)
private Date lastModified;
// ...
}
或者您必须将Jackson配置为仅使用getter进行序列化。