obs*_*kie 10 java xml json bean-validation
对于具有以下注释的Java代码:
@JsonProperty(value="Contact")
@NotNull(message = "ContactUser or CompanyName is required.")
@Valid
@XmlElements(value = {
@XmlElement(name = "ContactUser", type = ContactUser.class, required = true),
@XmlElement(name = "CompanyName", type = String.class, required = true) })
private Object contactInfo;
Run Code Online (Sandbox Code Playgroud)
将对象用于GET时的结果集是:
"Contact":{
"ContactUser":{
"Title": "Miss",
"LastName": "Hello"
}
}
Run Code Online (Sandbox Code Playgroud)
要么
"Contact": "Hello Company"
Run Code Online (Sandbox Code Playgroud)
有没有办法让它返回:
"ContactUser":{
"Title": "Miss",
"LastName": "Hello"
}
Run Code Online (Sandbox Code Playgroud)
要么
"CompanyName": "Hello Company"
Run Code Online (Sandbox Code Playgroud)
代替?在xml中,使用代码,您可以:
<CompanyName>Hello Company</CompanyName>
Run Code Online (Sandbox Code Playgroud)
要么
<ContactUser>
<Title>Miss</Title>
<LastName>Hello</LastName>
</ContactUser>
Run Code Online (Sandbox Code Playgroud)
我尝试过使用JsonTypeInfo但它似乎没有处理String.class:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include =JsonTypeInfo.As.WRAPPER_OBJECT, visible=true)
@JsonSubTypes({
@JsonSubTypes.Type(name = "ContactUserJ", value = ContactUser.class),
@JsonSubTypes.Type(name = "CompanyNameJ" , value = String.class)
})
Run Code Online (Sandbox Code Playgroud)
你用的是弹簧吗?我使用了一个简单的java类在简单的java中我得到了
{
"ContactUser" : {
"Title" : "sampleTitle",
"LastName" : "sampleLastName"
},
"CompanyName" : "XXXXX"
}
Run Code Online (Sandbox Code Playgroud)
你能重新表述一下你的问题吗?我想我完全不明白你的意图是什么。
这是我的代码:
@JsonProperty(value = "Contact")
@XmlElements(value = {
@XmlElement(name = "ContactUser", type = ContactUser.class, required = true)
,
@XmlElement(name = "CompanyName", type = String.class, required = true)})
private Object contactInfo;
public TestClassConstructor() throws JsonProcessingException {
contactInfo = new HashMap<String, Object>();
((HashMap) contactInfo).put("ContactUser", new ContactUser("sampleTitle", "sampleLastName"));
((HashMap) contactInfo).put("CompanyName", "XXXXX");
ObjectMapper mapper = new ObjectMapper();
String jsonResult = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(contactInfo);
System.err.println(jsonResult);
}
Run Code Online (Sandbox Code Playgroud)
如果您想要一个特定的序列化器,您需要检查:http://www.baeldung.com/jackson-serialize-field-custom-criteria