我可以有条件地使用@JsonUnwrapped吗?我不想在序列化期间使用它,但希望在反序列化对象时使用它。
一种方法是创建两个不同的类,或者创建一个子类覆盖那个属性,这个属性在序列化和反序列化时需要表现得不同。这听起来不太对。还有其他替代方法吗?或者杰克逊解决这个问题的方法吗?
有一种更简单的方法可以达到同样的效果,这种方法只基于注释:
@JsonUnwrapped(prefix = "name_")
@JsonProperty(access = READ_ONLY)
private Name nameObject;
// method will deserialize original JSON and set it to unwrapped field
@JsonSetter
public void setName(Name name) {
this.nameObject = name;
}
// simple getter
@JsonIgnore
public Name getName() {
return this.nameObject;
}
您可以使用万象网功能。使用此功能,POJO
类与杰克逊
注释分离。您可以使用 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'}}
每次我尝试调用REST服务时,都会收到以下错误消息 以下是REST服务(剥离到相关部分): JSON类 波姆。xml(有趣的部分) 我的设置是: JDK8/JEE7(build 1.8.0_51-b16) 这就是我迄今为止所尝试的: 找不到媒体类型为application/json的MessageBodyWriter- 我仍然认为这是一个依赖问题。但是我不知道会有什么问题。
问题内容: 我有一个组件,有时有时需要呈现为和,有时需要呈现为。在我读来确定这一点,是。 如果存在,则需要将组件包装在中。否则,它将仅呈现为。 可能? 这是我现在正在做的,但是感觉可以简化: 更新: 这是最终的锁定。感谢您的提示,@ Sulthan! 问题答案: 只需使用一个变量。 或者,您可以使用辅助函数来呈现内容。JSX和其他代码一样。如果要减少重复,请使用函数和变量。
我正在使用Spring MVC RESTful Web服务 组织。springframework。网状物客户ResourceAccessException:POST请求“http://”时发生I/O错误:服务器返回了URL:http://嵌套异常为java的http响应代码:415。伊奥。IOException:服务器返回了URL:HTTP:的HTTP响应代码:415// 原因:java。伊奥。I
Spring Boot应用程序的任务是每隔这么多分钟更新一次远程集成API。此应用程序可以部署到测试或prod环境中,通过“application.properties”标志通知应用程序应该查看的endpoint。POJO被Jackson序列化并推送到endpoint,JsonProperty注释包含它被推送到的API的字段ID。 ie 这些值的字段标签在测试endpoint上不同。因此,测试en
我需要创建一个自定义序列化程序,有条件地跳过字段。与使用jackson序列化时有条件跳过对象中描述的情况不同,我的类包含一个POJO成员。PersonalInfo有一个成员地址。如果地址被隐藏,结果JSON仍然有“Address”标记,但没有值。我想不出怎么解决这个问题。 在ObjectMapper上创建自定义序列化程序(参见3. athttp://www.baeldung.com/jackson
知道我做错了什么吗?如果重要的话,我将使用Jackson-core 2.1.1。