Tag: jackson

使用Jackson Mixins和MappingJacksonHttpMessageConverter和Spring MVC

我马上就会得到我真正的问题/问题, 有没有办法在HttpMessageConverter中访问控制器处理程序方法的注释 ? 我很确定答案是否定的(在浏览Spring的源代码之后)。 使用MappingJacksonHttpMessageConverter时,有没有其他方法可以使用Jackson Mixins配对? 我已经基于MappingJacksonHttpMessageConverter实现了我自己的HttpMessageConverter来“升级”它以使用Jackson 2.0。 Controller.class @Controller public class Controller { @JsonFilter({ @JsonMixin(target=MyTargetObject.class, mixin=MyTargetMixin.class) }) @RequestMapping(value=”/my-rest/{id}/my-obj”, method=RequestMethod.GET, produces=”application/json”) public @ResponseBody List getListOfFoo(@PathVariable(“id”) Integer id) { return MyServiceImpl.getInstance().getBarObj(id).getFoos(); } } @JsonFilter是我希望传递给mapper的自定义注释,然后可以自动将其直接提供给ObjectMapper。 MappingJacksonHttpMessageConverter.class public class MappingJacksonHttpMessageConverter extends AbstractHttpMessageConverter { … @Override protected void writeInternal(Object object, HttpOutputMessage outputMessage) { //Obviously, no access to the HandlerMethod […]

如何在Spring Boot 1.4中自定义Jackson

我一直无法找到如何在spring boot 1.4中使用Jackson2ObjectMapperBuilderCustomizer.java来自定义Jackson的function的示例。 用于在启动1.4中定制Jackson的doco – http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-customize-the-jackson- 我的配置工作,虽然我不确定这是否是使用Jackson2ObjectMapperBuilderCustomizer.java自定义对象映射器的正确方法 @Configuration public class JacksonAutoConfiguration { @Autowired private Environment env; @Bean public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder( List customizers) { Jackson2ObjectMapperBuilder builder = configureObjectMapper(); customize(builder, customizers); return builder; } private void customize(Jackson2ObjectMapperBuilder builder, List customizers) { for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) { customizer.customize(builder); } } private Jackson2ObjectMapperBuilder configureObjectMapper() { Jackson2ObjectMapperBuilder builder = […]

使用Jackson进行Java Mongo DBObject的高效POJO映射

虽然类似于使用MongoDB Java驱动程序将DBObject转换为POJO,但我的问题不同,因为我特别感兴趣使用Jackson进行映射。 我有一个对象,我想转换为Mongo DBObject实例。 我想使用Jackson JSON框架来完成这项工作。 一种方法是: DBObject dbo = (DBObject)JSON.parse(m_objectMapper.writeValueAsString(entity)); 但是,根据https://github.com/FasterXML/jackson-docs/wiki/Presentation:-Jackson-Performance,这是最糟糕的方式。 所以,我正在寻找替代方案。 理想情况下,我希望能够挂钩到JSON生成管道并动态填充DBObject实例。 这是可能的,因为在我的情况下,目标是一个BasicDBObject实例,它实现了Map接口。 因此,它应该很容易适应管道。 现在,我知道我可以使用ObjectMapper.convertValue函数将对象转换为Map,然后使用BasicDBObject类型的映射构造函数递归地将映射转换为BasicDBObject实例。 但是,我想知道我是否可以消除中间映射并直接创建BasicDBObject 。 注意,因为BasicDBObject本质上是一个映射,所以相反的转换,即从标量DBObject到POJO是微不足道的,应该非常有效: DBObject dbo = getDBO(); Class clazz = getObjectClass(); Object pojo = m_objectMapper.convertValue(dbo, clazz); 最后,我的POJO没有任何JSON注释,我希望它保持这种方式。

jackson与jaxb

在泽西岛使用jacksonJSON处理器时,我何时以及为什么需要在两者之间使用JAXB注释? Object->JAXB->JSON jackson还提供自己的JAX-RS提供程序,直接使用Object->JSON 。 这种方法缺少什么? 或者为什么我更喜欢另一个 ps:我也用spring

Jackson:Object Mapper注释用于反序列化内部集合

我想使用尽可能多的注释将以下json转换为java对象。 {“user”:{ “id”:1, “diets”:[ {“diet”:{ “name”:”…”, “meals”:[] } } ] } } 我在收集饮食方面遇到麻烦。 我试图使用@JsonProperty但它无法正常工作。 地图内部聚合是否有特殊注释? Diet.java @JsonRootName(value = “diet”) public class Diet { @JsonProperty(value=”name”) private String name; @JsonProperty(value=”meals”) private List meals; private User user; // Rest of the class omitted. } User.java @JsonRootName(value = “user”) public class User { @JsonProperty(“id”) private long id; @JsonProperty(“diets”) private […]

无法从START_ARRAY标记中反序列化java.lang.String的实例

我是Jackson解析器的新手。 我的代码运行正常,直到今天。 我无法弄清楚错误。 Exception in thread “main” com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token at [Source: line: 1, column: 1095] (through reference chain: JsonGen[“platforms”]) at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:163) at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:588) at com.fasterxml.jackson.databind.deser.std.JdkDeserializers$StringDeserializer.deserialize(JdkDeserializers.java:90) at com.fasterxml.jackson.databind.deser.std.JdkDeserializers$StringDeserializer.deserialize(JdkDeserializers.java:59) at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:336) at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:89) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:290) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:112) at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:226) at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:203) at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2563) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1789) at […]

使用Jackson读取JSON字符串的一部分

JSON字符串如下 { “rank”:”-text_relevance”, “match-expr”:”(label ‘star wars’)”, “hits”:{ “found”:7, “start”:0, “hit”:[ {“id”:”tt1185834″, “data”:{ “actor”:[“Abercrombie, Ian”,”Baker, Dee”,”Burton, Corey”], “title”:[“Star Wars: The Clone Wars”] } }, . . . {“id”:”tt0121766″, “data”:{ “actor”:[“Bai, Ling”,”Bryant, Gene”,”Castle-Hughes, Keisha”], “title”:[“Star Wars: Episode III – Revenge of the Sith”] } } ] }, “info”:{ “rid”:”b7c167f6c2da6d93531b9a7b314ad030b3a74803b4b7797edb905ba5a6a08″, “time-ms”:2, “cpu-time-ms”:0 } } 它有很多字段,但我只想要数据字段。 这不起作用: mapper.readvalue(jsonString,Data.class); 如何让jackson只阅读“数据”字段?

jackson的readValue和readTree:何时使用哪个?

我刚刚开始使用Jackson JSON库。 jackson是一个非常强大的库,但它有一个非常广泛的API。 很多事情可以通过多种方式完成。 这使得很难在jackson找到自己的方式 – 如何知道什么是正确/最好的做事方式? 我为什么要使用这个解决方案: String json = “{\”a\”:2, \”b\”:\”a string\”, \”c\”: [6.7, 6, 5.6, 8.0]}”; ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readValue(json, JsonNode.class); if (node.isObject()) { ObjectNode obj = mapper.convertValue(node, ObjectNode.class); if (obj.has(“a”)) { System.out.println(“a=” + obj.get(“a”).asDouble()); } } 通过这样的解决方案: String json = “{\”a\”:2, \”b\”:\”a string\”, \”c\”: [6.7, 6, […]

如何使用Jackson和注释以不同方式序列化关联对象?

给定以下类层次结构,我希望Foo根据其在类层次结构中使用的上下文进行不同的序列化。 public class Foo { public String bar; public String biz; } public class FooContainer { public Foo fooA; public Foo fooB; } 当我序列化FooContainer时,我想将biz属性显示在fooB中。 所以输出看起来像下面这样。 { “fooA”: {“bar”: “asdf”, “biz”: “fdsa”}, “fooB”: {“bar”: “qwer”} } 我打算使用JsonView,但必须在mapper层应用于类的所有实例,这与上下文有关。 在Jackson用户邮件列表中,Tatu提供了最简单的解决方案(适用于2.0),我现在可能最终会使用它。 将赏金授予jlabedo,因为答案是如何使用自定义注释扩展Jackson的一个很棒的例子。 public class FooContainer { public Foo fooA; @JsonIgnoreProperties({ “biz” }) public Foo fooB; }

如何忽略Jackson JSON-to-Object映射中的枚举字段?

我有一个JSON对象,如: {“name”:”John”, “grade”:”A”} 要么 {“name”:”Mike”, “grade”:”B”} 要么 {“name”:”Simon”, “grade”:”C”} 等等 我试图将上面的JSON映射到: @JsonIgnoreProperties(ignoreUnknown = true) public class Employee{ @JsonIgnoreProperties(ignoreUnknown = true) public enum Grade{ A, B, C } Grade grade; String name; public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } public String getName() { return name; } public […]