我可以有条件地使用@JsonUnwrapped吗?我不想在序列化过程中使用它,但想在反序列化对象时使用它。
一种实现方法是创建两个不同的类或创建一个子类,该子类仅覆盖需要在序列化和反序列化时表现不同的属性。这听起来不对。还有其他替代方法或Jackson的解决方法吗?
您可以使用MixIn功能。使用此要素POJO
类与Jackson
注释分离。您可以使用在运行时中添加必要的注释MixIn
。请参见以下示例:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTest {
private static final String UNWRAPPED_JSON = "{\n" +
" \"age\" : 13,\n" +
" \"first\" : \"Huckleberry\",\n" +
" \"last\" : \"Finn\"\n" +
"}";
@Test
public void test() throws IOException {
System.out.println("### Serialize without unwrapped annotation ###");
ObjectMapper serializer = new ObjectMapper();
System.out.println(serializer.writerWithDefaultPrettyPrinter().writeValueAsString(createParent()));
System.out.println("### Deserialize with unwrapped annotation ###");
ObjectMapper deserializer = new ObjectMapper();
deserializer.addMixInAnnotations(Parent.class, ParentMixIn.class);
System.out.println(deserializer.readValue(UNWRAPPED_JSON, Parent.class));
}
private Parent createParent() {
Name name = new Name();
name.first = "Tom";
name.last = "Sawyer";
Parent parent = new Parent();
parent.setAge(12);
parent.setName(name);
return parent;
}
}
class Parent {
private int age;
private Name name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
@Override
public String toString() {
return "Parent{" +
"age=" + age +
", name=" + name +
'}';
}
}
interface ParentMixIn {
@JsonUnwrapped
Name getName();
}
class Name {
public String first, last;
@Override
public String toString() {
return "Name{" +
"first='" + first + '\'' +
", last='" + last + '\'' +
'}';
}
}
上面的程序打印:
### Serialize without unwrapped annotation ###
{
"age" : 12,
"name" : {
"first" : "Tom",
"last" : "Sawyer"
}
}
### Deserialize with unwrapped annotation ###
Parent{age=13, name=Name{first='Huckleberry', last='Finn'}}
我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似
问题内容: 在Jersey上使用Jackson 处理器时,何时以及为何需要在两者之间使用注释? 杰克逊(Jackson)还提供了自己的服务提供商以直接使用。这种方法缺少什么?还是为什么我比其他人更喜欢 ps:我也用弹簧 问题答案: 为了生成JSON,通常只需指定即可。但是,这将默认采用JAXB路由。 使用Object-> JAXB-> JSON,您必须注释要映射的类。这可以很好地工作,但是一旦您要
我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A
首先,我不熟悉Jython。我正在寻找一种将python代码集成到Java项目中的方法。因此我正在调查Jython。 我正在尝试将一个 json 字符串转换为 Java 对象 - 在 python 中。 首先,我一直在努力让Jython找到我的java类。由于缺乏更优雅的解决方案,我可以通过简单地执行以下操作来向前迈进: 无论如何。。。 我正在尝试以下操作: 但是,在运行时,我收到以下错误: 我不
问题内容: Spring MVC 3.1与Jackson 2.0兼容吗?Spring MVC在类路径上自动检测Jackson并将其委托给Jackson以JSON内容类型的请求是否仍然有效? 问题答案: 在Spring 3.2中添加了对Jackson 2的支持,并且还向后移植到了Spring 3.1.2(SPR-9507)
我正在尝试将jboss wildfly 8配置为将Jackson用于JSON。所以我补充说 我的耳朵工程。但在部署时,我会遇到以下错误: 原因:java。lang.LinkageError:加载程序约束冲突:解析重写的方法“org.jboss.resteasy.plugins.providers.jackson.ResteasyJacksonProvider$Proxy$\u$$WeldClien