Tag: jackson

将Jersey / Jackson配置为不使用@XmlElement字段注释进行JSON字段命名

我正在运行Jersey REST服务。 代表我的资源的POJO是JAXB(XML)带注释的简单Java类(它们是从模式定义生成的 – 因此它们具有注释)。 我希望Jersey / Jackson忽略XML-Annotations。 我在我的web.xml中做了这个配置(如这里提到的): com.sun.jersey.api.json.POJOMappingFeature true 我现在预计@ZMLElement注释不再用于JSON字段命名策略。 但是看看这个java字段(成员) @XmlElement(name = “person”, required = true) protected List persons; 我仍然得到以下JSON表示: ….,”person”:[{“name”:”FooBar”, ……. (person without the ‘s’) 所有其他字段仍然从@XmlElement注释中获取其JSON名称,而不是从Java字段名称获取。 我想实现jackson全数据绑定(POJO)示例中描述的JSON输出。 它在这样的简单测试中工作正常(使用我的XML注释类): ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(System.out, myObject); 但嵌入在泽西岛我没有得到预期的JSON输出。 Jersey中的其他配置选项是否为“简单”POJO JSON表示(因为这最适合需要反序列化JSON结果的客户端)。 谢谢克劳斯 详细解决方案 (1)为Jacksons ObjectMapper实现ContextResolver ,它创建一个不使用注释的ObjectMapper。 package foo.bar.jackson; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.ContextResolver; […]

Spring-MVC 406不可接受而不是JSON响应

我正在尝试使用Spring 3.0.6返回JSON响应,但我得到406响应“Not Acceptable”,其描述为:“此请求标识的资源只能生成具有不可接受的特征的响应”请求“接受”标题()。“ 我知道之前已经提出了一个非常类似的问题 ,但是我无法让它适用于我的项目,尽管进行了许多测试但我不明白我做错了什么。 在我的Maven pom.xml中,我有以下内容: org.codehaus.jackson jackson-mapper-asl 1.8.5 compile org.codehaus.jackson jackson-core-asl 1.8.5 compile 在web.xml中,我引用webmvc-config.xml,日志确认已加载。 mainServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/webmvc-config.xml 1 在webmvc-config.xml中,我有以下内容: 我的控制器是: @Controller public class ClassifiedController { @RequestMapping(value = “/classified/{idClassified}”, headers = “Accept=*/*”, method = RequestMethod.GET) @ResponseBody public final Classified getClassified(@PathVariable final int idClassified) { … 我尝试使用或不使用headers参数,但结果相同。 如果我直接使用Firefox调用URL,请求标头包含以下内容(使用firebug进行检查): Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 如果我使用以下JQuery: $.ajax({ url: ‘/classified/38001’, […]

使用Jackson将Json反序列化为另一个类层次结构

现在我和jackson合作,我对此有一些疑问。 首先。 我有两个服务,第一个是数据收集和发送服务,第二个接收这些数据,例如,将其记录到文件中。 所以,第一个服务有类层次结构,如下所示: +—-ConcreteC | Base —-+—-ConcreteA | +—-ConcreteB 第二个服务有类层次结构,如下所示: ConcreteAAdapter extends ConcreteA implements Adapter {} ConcreteBAdapter extends ConcreteB implements Adapter {} ConcreteCAdapter extends ConcreteC implements Adapter {} 第一个服务对ConcreteXAdapter一无所知。 我在第一个服务上发送数据的方式: Collection data = new LinkedBlockingQueue() JacksonUtils utils = new JacksonUtils(); data.add(new ConcreteA()); data.add(new ConcreteB()); data.add(new ConcreteC()); … send(utils.marshall(data)); … public class JacksonUtils { public […]

如何使用Java和Jackson Library对Json String进行多态反序列化?

我有一些类A,B,C它们都inheritance自BaseClass类。 我有一个String json,它包含A,B,C或BaseClass的json表示。 我想有一些方法将此String反序列化为BaseClass(多态反序列化)。 像这样的东西 BaseClass base = ObjectMapper.readValue(jsonString, BaseClass.class); jsonString可以是A,B,C或BaseClass中的任何一个的Json String表示。

我们可以在使用JSON时将对象设置为地图中的键吗?

如下面的代码: public class Main { public class innerPerson{ private String name; public String getName(){ return name; } } public static void main(String[] args){ ObjectMapper om = new ObjectMapper(); Map map = new HashMap(); innerPerson one = new Main().new innerPerson(); one.name = “david”; innerPerson two = new Main().new innerPerson(); two.name = “saa”; innerPerson three = new […]

Jackson JSON序列化,通过级别定义的递归避免

我使用Jackson库将我的pojo对象序列化为JSON表示。 例如,我有A类和B类: class A { private int id; private B b; constructors… getters and setters } class B { private int ind; private A a; constructors… getters and setters } 如果我想序列化来自A类的对象,则在序列化时有可能获得递归。 我知道我可以通过使用@JsonIgnore来阻止它。 是否可以按深度级别限制序列化? 例如,如果级别为2,则序列化将采用以下方式: 序列化a,level = 0(0 序列化 序列化ab,level = 1(1 序列化 序列化aba,level = 2(2 停止 提前致谢。

Jackson JSON库:如何实例化包含抽象字段的类

我想将JSON字符串转换为java对象,但此对象的类包含抽象字段,Jackson无法实例化,也不会生成对象。 告诉它关于抽象类的一些默认实现的最简单方法是什么,比如 setDefault(AbstractAnimal.class, Cat.class); 或者根据JSON属性名称来决定实现类,例如。 对于JSON对象: { … cat: {…} … } 我愿意: setImpl(“cat”, Cat.class); 我知道Jackson可以在JSON中嵌入类信息,但我不想让我使用的JSON格式复杂化。 我想通过设置默认实现类或属性名称(’cat’)来决定使用哪个类 – 就像在XStream库中一样,您可以在其中编写: xStream.alias(“cat”, Cat.class); 有没有办法这样做,特别是在一行中,还是需要更多的代码?

使用类名作为JSON Jackson序列化的根密钥

假设我有一个pojo: import org.codehaus.jackson.map.*; public class MyPojo { int id; public int getId() { return this.id; } public void setId(int id) { this.id = id; } public static void main(String[] args) throws Exception { MyPojo mp = new MyPojo(); mp.setId(4); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true); System.out.println(mapper.getSerializationConfig().isEnabled(SerializationConfig.Feature.WRAP_ROOT_VALUE)); System.out.println(mapper.writeValueAsString(mp)); } } 当我使用Jackson ObjectMapper进行序列化时,我得到了 true {“id”:4} 但我想要 […]

jackson没有反序列化它已序列化的通用列表

当使用Apache Jersey与Jackson进行JSON序列化时(在服务器和客户端上),我在反序列化通用List时遇到了问题。 我生成的JSON如下,“data”中的所有3个类都实现了“CheckStatusDetail”: { “errorCode” : 0, “errorMessage” : null, “type” : “array”, “data” : [ { “@class” : “com.rrr.base.status.module.dto.DiscoveryAgentCheckStatusDetail”, “serverInfo” : { “@class” : “com.rrr.base.util.discovery.config.xml.XMLServerInfo”, “name” : “java”, “location” : “THEO”, “description” : “sddgs”, “group” : “java”, “aliases” : [ “mercury” ] } }, { “@class” : “com.rrr.base.status.module.dto.MongoDBCheckStatusDetail”, “addresses” : [ “localhost:27017” ], “version” […]

为什么我无法使用Jackson Java库解包和序列化Java映射?

我的bean看起来像这样: class MyBean { private @JsonUnwrapped HashMap map = new HashMap(); private String name; public HashMap getMap() { return map; } public void setMap(HashMap map) { this.map = map; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 当我使用以下代码序列化bean时: MyBean bean = new MyBean(); HashMap map […]