Tag: jackson

使用Jackson将Java对象序列化为JSON时,抑制包装器对象

我有一个Web服务,返回一个列表作为JSON。 它使用Jackson将Java POJO列表映射到JSON。 问题是JSON表示在数组周围有一个包装器对象,我只想要数组。 即,我得到了这个: {“optionDtoList”:[{…}, …, {…}]} 当我真正想要的是这个: [{…}, …, {…}] 我正在直接序列化Java List; 我没有用包装器对象包装List并序列化包装器对象。 jackson似乎正在添加JavaScript包装器对象。 我假设我可以在POJO上使用一些注释来抑制包装器对象,但我没有看到它。 对解决方案的限制 我想在服务端解决这个问题,而不是剥掉客户端上的包装器。 客户端是一个jQuery UI小部件(自动完成小部件,并不重要),它需要一个简单的数组,我不想修改小部件本身。 我试过的 我尝试用Java POJO数组替换Java POJO列表,结果是一样的。 我试过@JsonTypeInfo(use = Id.NONE)认为这可能会抑制包装器,但它没有。

jackson多态反序列化 – 您是否可以要求存在字段而不是特定值?

在动物园示例中使用旋转: public class ZooPen { public String type; public List animals; } public class Animal { public String name; public int age; } public class Bird extends Animal { public double wingspan; } 如果没有指定翼展,我想使用多态反序列化来构造Animal实例,如果是,则使用Bird实例。 在Jackson中,无类型反序列化通常看起来像这样: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = “wingspan”, visible = true, defaultImpl = Animal.class ) @JsonSubTypes({ @Type(value = […]

泽西/jackson@JsonIgnore在二传手

我有一个带有以下注释的类: class A { public Map<String,List> references; @JsonProperty public Map<String,List> getReferences() { … } @JsonIgnore public void setReferences(Map<String,List>) { } … } } 我尝试的是忽略反序列化的json。 但它不起作用。 始终当JSON String到达时,Jackson lib会填充references属性。 如果我只使用@JsonIgnore注释,则getter不起作用。 这个问题有什么解决方案吗? 谢谢

当jackson反序列化失败时,Jerseyexception映射器无法正常工作

我在我的REST API中使用Jersey 2.10和Jackson序列化/反序列化function。 我的想法是让我的REST API始终返回标准的JSON错误响应。 为此,我有ExceptionMapper类,为Jersey应用程序中抛出的任何exception构建正确的json错误响应。 我还有一个生成相同类型的JSON响应的jsp,我在web.xml中注册为error-page,它涵盖了Jersey加载之前可能出现的所有错误。 但是有一种情况,我的Exception mappers和我的json生成jsp都没有工作,就是当一个坏的形成的json发送到POST REST端点时,它只返回以下消息: HTTP/1.1 400 Bad Request Server: Apache-Coyote/1.1 Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, DELETE, PUT Content-Type: text/plain Content-Length: 210 Date: Tue, 24 Jun 2014 22:14:11 GMT Connection: close Can not deserialize instance of com.example.rest.User[] out of START_OBJECT token at [Source: org.glassfish.jersey.message.internal.EntityInputStream@1dcccac; line: 1, column: 1] 如何让Jersey返回我的自定义错误响应而不是这个? 更新: […]

如何使用Jackson创建这个json字符串?

这是我想要的输出 {“node”:{“type”:”community”,”field_incentives”:{“und”:[{“value”:”fun”},{“value”:”nice”}]},”field_community_email”:{“und”:[{“value”:”some@one.com”}]}}} 这是我的代码,但它似乎没有生成上面的输出。 如果有更好更简单的方法,请告诉我。 谢谢 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); JsonFactory f = new JsonFactory(); JsonGenerator g = f.createJsonGenerator(outputStream); g.writeStartObject(); g.writeObjectFieldStart(“node”); g.writeStringField(“type”, “community”); g.writeObjectFieldStart(“field_incentives”); g.writeFieldName(“und”); g.writeStartArray(); ???I don’t know how to make [{“value”:”fun”},{“value”:”nice”}] g.writeEndArray(); g.writeEndObject(); g.close();

Java模型的JSON字段映射

发送的JSON: { “Banner”: “ABC” } Java模型: … @JsonIgnoreProperties(ignoreUnknown = true) @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class BannerData implements java.io.Serializable { private static final long serialVersionUID = 5664846645733319592L; @JsonProperty(value = “Banner”) private String banner; public String getBanner() { return banner; } public void setBanner(String banner) { this.banner = banner; } } 控制器: @RequestMapping(value = {“/GetBanner”}, method = […]

Jersey:找不到类型的合适构造函数:无法从JSON对象实例化

我有一个资源,其方法如下: @PUT @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Path(“/add”) public Response putThing(Thing thing) { try { //Do something with Thing object return Response.status(HttpStatus.SC_OK).build(); } catch (Exception e) { log.error(“Request failed”, e); return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).build(); } } 事情: public class Thing { private final String symbol; private final String name; public Stock(String symbol, String name) { this.symbol = symbol; this.name = […]

使用Jackson(Joda-Time模块)进行DateTime反序列化的默认时区

这个问题是关于使用jackson的jackson-datatype-joda模块对Joda-Time DateTime进行反序列化。 是否有一个默认时区,日期字符串将被反序列化? 如果是这样,它是什么? 是UTC吗? 我需要问这个,因为jackson的文档并不是特定的Joda-Time DateTime。 我在本文( http://wiki.fasterxml.com/JacksonFAQDateHandling )中发现,Jackson会将GMT作为反序列化为java.util.Date或java.util.Calendar的默认时区。 但是,本文档中没有提及Joda-Time数据类型。 另外,我特别需要使用UTC时区将字符串反序列化为DateTime对象,而不是GMT:尽管这两个区域非常相似,但是存在一些小差异,因此GMT对我来说是不可行的。 谢谢。

Jackson在Spring Boot中错误地序列化了ZonedDateTime

我有一个Spring Boot和Jetty的简单应用程序。 我有一个简单的控制器返回一个具有Java 8 ZonedDateTime的对象: public class Device { // … private ZonedDateTime lastUpdated; public Device(String id, ZonedDateTime lastUpdated, int course, double latitude, double longitude) { // … this.lastUpdated = lastUpdated; // … } public ZonedDateTime getLastUpdated() { return lastUpdated; } } 在我的RestController我只需: @RequestMapping(“/devices/”) public @ResponseBody List index() { List devices = new ArrayList(); devices.add(new […]

Spring 3使用Jackson将ArrayList序列化为JSON而不包装到对象(没有名称)

我有简单的资源,它应该返回JSON数组,但它返回的对象是数组: @RequestMapping(value = “/types”, method = RequestMethod.GET) public List types() { ArrayList list=new ArrayList(); list.add(new JsonObject(“Audi”)); list.add(new JsonObject(“Mercedes”)); return list; } 其中JsonObject是具有三个String atributes(value,id,label)的简单类。 返回: {“jsonObjectList”:[{“value”:”Audi”,”id”:”Audi”,”label”:”Audi”},{“value”:”Mercedes”,”id”:”Mercedes”,”label”:”Mercedes”}]} 但我需要的是(因为它是Jquery UI自动完成预期): [{“value”:”Audi”,”id”:”Audi”,”label”:”Audi”},{“value”:”Mercedes”,”id”:”Mercedes”,”label”:”Mercedes”}] 怎么实现呢? 提前致谢。