Tag: jackson

强制jackson使用注释添加附加包装

我有以下课程: public class Message { private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } } 在默认情况下使用Jackson将实例转换为JSON时,我得到: {“text”:”Text”} 我想得到: {“message”:{“text”:”Text”}} 是否有任何JAXB / Jackson注释可用于实现我的目标? 作为一种解决方法,我可以用另一个类包装我的类: public class MessageWrapper { private Message message; public Message getMessage() { return message; } public void setMessage(Message message) { this.message = message; […]

如何从Jersey资源生成JSON?

我正在使用Jersey并希望仅输出列出的字段输出以下JSON: [ { “name”: “Holidays”, “value”: “http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic” }, { “name”: “Personal”, “value”: “http://www.google.com/calendar/feeds/myprivatefeed/basic” } ] 如果必须的话,我可以使用{“feeds”:…}来包围JSON,但是将其设为可选是最好的。 我想从CalendarFeeds列表中提取这些信息,这些CalendarFeeds存储在通过Hibernate检索的Member POJO中。 以下是简化的POJO: public class Member { private String username; private String password; private Set calendarFeeds = new HashSet(); } public class CalendarFeed { public enum FeedType { GCAL, EVENT }; private Member owner; private String name; private String […]

Jackson + Tomcat – java.lang.VerifyError:无法从最终类inheritance

我有一个在Tomcat 6中运行的Java Web服务,它接受JSON输入。 我试图使用Jackson ObjectMapper来解析输入json。 但是在初始化ObjectMapper对象时,我收到了这个错误 16:08:13,616 ERROR [[jersey]] Servlet.service() for servlet jersey threw exception java.lang.VerifyError: Cannot inherit from final class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2733) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1124) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1612) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) at com.test.project.offline.ws.WsApiResource.updateData(WsApiResource.java:169) ……. 在第169行,我有这个ObjectMapper mapper = new ObjectMapper(); 在unit testing中本地调用com.test.project.offline.ws.WsApiResource.updateData()方法时,它可以正常工作而不会出现任何错误。 请帮我解决这个问题。 我使用的是Jackson 1.8.4和tomcat 6。 更新:修复了这个问题。 问题是依赖树中不同版本的jackson。 排除它解决了问题。

在序列化对象时,如何强制Jackson将数字写为字符串

我的一个java对象上的id非常大。 当jackson将其转换为JSON时,它会将其作为数字发送(例如{“id”:1000110040000000001})但是一旦它成为javascript对象,id就会变为1000110040000000000.我在这里读到了这个问题 当id较小时,它工作正常。 我的第一个想法是强迫jackson将所有数字转换成字符串,但我也对其他选项持开放态度。 如果可能的话,我宁愿不将Jackson注释添加到我的java对象中。

将ObjectNode写入JSON字符串,使用UTF-8字符转换为ASCII

我想把Jackson的ObjectNode的内容写成一个字符串,其中UTF-8字符写成ASCII(Unicode转义)。 这是一个示例方法: private String writeUnicodeString() { ObjectMapper mapper = new ObjectMapper(); ObjectNode node = mapper.getNodeFactory().objectNode(); node.put(“field1”, “Maël Hörz”); return node.toString(); } 默认情况下,输出: {“field1″:”Maël Hörz”} 我希望它输出的是: {“field1″:”Ma\u00EBl H\u00F6rz”} 我怎么能做到这一点?

jackson为一个具有多态类型的字段定制解串器

更新: 我尝试在jackson源代码中调试并在方法中找出它 deserialize(JsonParser jp, DeserializationContext ctxt) SettableBeanProperty.java 当_valueTypeDeserializer不为null时,它将永远不会使用_valueDeserializer 。 这是一个正确的假设,TypeDeserializer应该比ValueDeserializer更合适吗? 我正在尝试使用@JsonDeserialize为具有多态类型的一个字段定义自定义反序列化器。 我可以单独使用@JsonDeserialize和@JsonTypeInfo 。 但是当我一起使用它们时,似乎忽略了@JsonDeserialize注释。 这是我的类层次结构: 1. Definition.java @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “type”, defaultImpl = Definition.class) @JsonSubTypes({@Type(value = Definition.class, name = “normal”), @Type(value = FormDefinition.class, name = “form”)}) public class Definition { private String name; private String description; // getter&setter for name&description […]

Jackson – Java bean到JSON字符串:大写变量在JSON中转换为小写

我正在使用ObjectMapper的writeValueAsString方法将Java bean转换为JSON字符串,其中来自Java bean的大写变量在JSON字符串中被更改为小写。 jackson2.7.4版本实施。 基豆样品 – public class BaseBean { private static final long serialVersionUID = 3947489072259877540L; private int _iXId; private String _sPNR; private ArrayList _alMinPriced = new ArrayList(); public int getXId() { return _iXId; } public void setXId(int id) { _iXId = id; } public String getPNRNumber() { return _sPNR; } public void setPNRNumber(String […]

Jackson自定义属性 – 多态属性的类型映射名称

我试图反序列化一个相当复杂的POJO JSON,我需要定义一个特定的属性名称来解析,但是找不到这个相当简单的function。 假设一个类如下: class Example { int id; Map extras; } 和Jackson正确地将POJO序列化为JSON,其中地图被序列化为键值映射,就像预期的那样: {… id:5, extras:{object1:{…}, object2:{…}} …} 现在我想告诉jackson根据实际类型明确地反序列化附加对象。 所以我需要告诉Jackson以某种方式将“object1”映射到Type A,将“object2”映射到B型。 这可能吗? 谢谢。

jackson序列化:包裹领域

当我们打开嵌套对象并将其字段写入主对象时,有一个众所周知的情况,我需要做一个反向任务。 我有一个POJO: class A { private String id = “id1”; @JsonWrap(“properties”) private String property1 = “…”; @JsonWrap(“properties”) private String property2 = “…”; // getters and setters } 默认序列化程序将按预期生成 { “id”: “id1”, “property1”: “…”, “property2”: “…” } 但是,我的JSON应该符合某些规范,为此,我需要将property1和property2包装在properties包装器中。 所以结果应该是这样的: { “id”: “id1”, “properties”: { “property1”: “…”, “property2”: “…” } } 我不想改变POJO的结构,所以我看到了3种可能的方法: 编写自定义序列化器。 但是在我看来,编写这样的序列化器将需要更多的努力,然后手动序列化对象。 创建代理Java对象,它将反映JSON的正确结构,并序列化此类代理。 生成后修改JSON。 (我担心重读和重写JSON会有很大的开销)。 […]

使用Gson或Jackson对JSON进行反序列化时忽略空字段

我知道在将对象序列化为JSON时,有很多关于跳过具有空值的字段的问题。 我想在将JSON反序列化为对象时跳过/忽略具有空值的字段。 考虑一下课程 public class User { Long id = 42L; String name = “John”; } 和JSON字符串 {“id”:1,”name”:null} 做的时候 User user = gson.fromJson(json, User.class) 我希望user.id为’1’, user.name为’John’。 Gson或Jackson是否可以采用一般方式(没有特殊的TypeAdapter或类似的)?