Tag: jackson

如何将ObjectId序列化为JSON?

我想将Product类的ObjectId序列化为JSON。 我得到了以下JSON: [{“name”:”Play for Java: Covers Play 2″,”type”:”Book”,”company”:”Manning Publications”,”price”:30.0,”imagePath”:”public/images/play-for-java.png”,”rating”:4.5,”category”:”Computer”,”author”:”Nicolas Leroux”,”publicationDate”:1396224000000,”numPage”:320,”_id”:539da7a6370882f10d5c2777}] 您可以注意到”_id”没有被正确序列化,它应该是”539da7a6370882f10d5c2777″ (带双引号)而不仅仅是539da7a6370882f10d5c2777 。 因此,我尝试实现自己的ObjectIdSerializer如下: import java.io.IOException; import org.bson.types.ObjectId; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; public class ObjectIdSerializer extends JsonSerializer { @Override public void serialize(ObjectId value, JsonGenerator jsonGen,SerializerProvider provider) throws IOException, JsonProcessingException { jsonGen.writeString(value.toString()); } } 它给了我不同的错误: java.lang.String cannot be cast to org.bson.types.ObjectId (through […]

使用Jackson XmlMapper进行序列化时添加DTD

当我序列化我的POJO时,一切都按预期工作。 我得到这样的东西: … 收件人(Google Search Appliance)似乎期望XML包含这样的DTD: … 我怎样才能做到这一点?

Java Camel框架:丢失处理器中的消息体

所有, 这是一条简单的路线: … JsonValidator是一个简单的Java bean,我扩展了处理器。 在这里,我想确保在使用Jackson将JSON解组到我的POJO之前继续使用unmarshal调用之前传递所有必需字段。 我现在所做的只是一行: public void process(Exchange exchange) throws Exception { String input = exchange.getIn().getBody(String.class); } 简单地调用exchange.getIn()。getBody(String.class)会导致我的路径中的下一个(解组)步骤抛出错误,说没有任何解组。 事实上,我通过在JsonValidator之后添加另一个处理器来测试这个 – 在那里,交换体不是null但是它是空的。 这是错误: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: org.apache.camel.converter.stream.InputStreamCache@78f0a00a; line: 1, column: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2931) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2873) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2080) at org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:105) at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:65) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398) […]

Springboot REST应用程序应该接受并生成XML和JSON

我正在开发Springboot REST API。 我的应用程序应该使用并生成XML和JSON。 我遇到了Jackson json Xml的依赖。 com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.5.4 我在我的pom.xml中添加了这个。 现在我能够接受xml输入,但映射到Java Object时值为null。 以下是我的资源类。 @Configuration @ImportResource(“/application-context.xml”) @EnableAutoConfiguration @ResponseBody @RequestMapping(“/match”) public class MatchResource { private static final Logger logger = LogManager.getLogger(MatchResource.class); @Autowired private MatchService matchService; @RequestMapping(method = RequestMethod.POST) @Consumes({MediaType.TEXT_XML,MediaType.APPLICATION_JSON}) @Produces({MediaType.TEXT_XML,MediaType.APPLICATION_JSON}) //@Produces( MediaType.APPLICATION_XML) public Response matchRequest(@RequestBody MatchRequest matchRequest, @Context HttpServletRequest headers) throws Exception { Response resp = […]

将嵌套的Pojo对象存储为数据库中的单个对象

我使用jackson将json字符串映射到我的HTModel类,这基本上是一个简单的Pojo。 class HTModel{} public class Post extends HTModel { public String id; public String content; public String author; } 即使这些类嵌套在一起,这也很有效。 public class Venue extends HTModel { public ArrayList posts; } 我设置了一个简单的SqlLite模式来缓存和索引这些模型的类型和ID。 我的问题是,如果模型包含其他模型的字段,我不想将整个数据库中的Venue模型存储起来。 ArrayList Venue.posts中的每个post都应单独保存。 什么是最好的方法呢?

如何通过jackson生成器html转义值

我们使用Spring及其内置的MappingJacksonHttpMessageConverter生成大量JSON对象。 太棒了 但是现在我想要html转义我的(任何类型)对象的String值以防止XSS。 那么,我该如何解决这个问题呢? 我首先想到我可以编写一个自定义的Object mapper并将其放入MappkingJacksonHttpMessageConverter中。 但是,writeValue接受一个Object,我不希望这样,我想让它的字段迭代。 我打赌jackson转换器也需要这样做,而不是自己这样做。 所以我想影响那一部分。 现在我最终得到了一个SerializerProvider接口。 ObjectMapper调用标准实现(StdSerializerProvider)。 所以我想在某处覆盖/影响负责设置值的方法。 那可能吗? 据我所知,很难扩展。 我无法覆盖StdSerializerProvider来覆盖ObjectMapper使用的方法。 也许我需要覆盖另一个? 或者,这可能是完全错误的,我需要从一个完全不同的角度来看待它? 有什么想法吗? 哦顺便说一句,自己实现SerializerProvider并创建一个委托给StdSerializerProvider的composit,可能是可能的,但我宁愿不这样做。 (我自己在实例化StdSerializerProvider时遇到了问题)。 任何想法都表示赞赏!

多个相同返回类型的Jackson序列化器

我正在使用Jackson进行JSON序列化,并编写了一些自定义String序列化程序,一个用于类的每个getter方法。 每个方法返回相同的类型Set ,但每个都使用不同的序列化程序。 不幸的是,jackson没有使用每个序列化器,每个方法一个,但两个都使用一个序列化器。 它似乎采用按字母顺序排列的任何方法,并将其序列化器用于这两种方法。 我期望的是第一种方法注释的序列化器用于第一种方法,第二种方法注释的序列化器用于第二种方法。 调试似乎表明Jackson在地图中的序列化器中键入了方法的返回类型(两者都相同)。 一个例子: public class FooBar { private Set foos = new HashSet(); private Set bars = new HashSet(); @JsonProperty(“FooWrapper”) @JsonSerialize(contentUsing = FooSerializer.class) public Set getFoos() { return foos; } @JsonProperty(“BarWrapper”) @JsonSerialize(contentUsing = BarSerializer.class) public Set getBars() { return bars; } } 有关如何使用getFoos()获取getFoos()方法序列化以及使用FooSerializer序列化的getFoos()方法的任何建议? 在此示例中,将为两种方法调用BarSerializer 。 注意,如果我将其中一个方法的签名更改为另一个集合类型,以便它们不同 – 例如List – 序列化工作。 […]

如何使用基于java.util.Map的类序列化Jackson

我有一个看起来像这样的课: @JsonFormat(shape=JsonFormat.Shape.OBJECT) public class MyMap implements Map { protected Map myMap = new HashMap(); protected String myProperty = “my property”; public String getMyProperty() { return myProperty; } public void setMyProperty(String myProperty) { this.myProperty = myProperty; } // // java.util.Map mathods implementations // … } 以及使用此代码的主要方法: MyMap map = new MyMap(); map.put(“str1”, “str2”); ObjectMapper mapper = […]

永恒的龙目岛与jackson注释的类

创建类的首选方法是什么? 不可变 可以使用Jackson序列化/反序列化 人性化,低水平的样板 最好,我会喜欢这样的工作: @Data(onConstructor = @__(@JsonCreator)) 然后让所有领域成为private final 。 但是,这甚至没有编译(我不知道为什么)。 运用 @AllArgsConstructor(onConstructor = @__(@JsonCreator)) 将编译,但只收益 InvalidDefinitionException: No serializer found for class

jackson映射字符串或简单字符串列表

我试图从API中获取一些Json并将它们解析为一些POJO以与它们一起工作但我有这种情况,我可以获得一个键的简单字符串或字符串的数组列表。 Json看起来像这样: { “offerDisplayCategoryMapping”: [ { “offerKey”: “EUICC_BASE_ACTIVATION_V01”, “categoriesKeys”: { “categoryKey”: “Included” } }, { “offerKey”: “EUICC_BASE_ACTIVATION_V02”, “categoriesKeys”: { “categoryKey”: “Included” } }, { “offerKey”: “EUICC_BASE_ACTIVATION_V03”, “categoriesKeys”: { “categoryKey”: [ “Option”, “Included” ] } }] } 我正在使用Spring Rest从API中获取结果。 我创建了一个POJO,表示使用List定义categoryKey ,在我的RestTemplate我定义了一个ObjectMapper ,我在其中为简单字符串的情况启用了DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY但这不起作用!! 有什么建议么?