【问题标题】:Json version of XMLElements choiceJson 版本的 XMLElements 选择
【发布时间】:2018-06-25 01:43:00
【问题描述】:

对于带有以下注解的 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;

当我将对象用于 GET 时的结果集是:

"Contact": {
    "ContactUser": {
        "Title": "Miss",
        "LastName": "Hello"
    }
}

"Contact": "Hello Company"

有没有办法让它返回:

"ContactUser": {
    "Title": "Miss",
    "LastName": "Hello"
}

"CompanyName": "Hello Company"

相反?在xml中,使用代码,你可以这样做:

 <CompanyName>Hello Company</CompanyName>

<ContactUser>
    <Title>Miss</Title>
    <LastName>Hello</LastName>
</ContactUser>

我尝试过使用 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)
    })

【问题讨论】:

  • Object 类型看起来太笼统了。
  • 我认为您想根据填写的信息返回一个或另一个?
  • 我认为如果 Object contactInfo 是一个 Map 的实例很容易,如果 ContactUser 或 CompanyName 存在,您可以添加一个条件来放置键和值

标签: java json xml bean-validation


【解决方案1】:

你在用弹簧吗?我用了一个简单的java类在简单的java中我得到了

{
   "ContactUser" : {
    "Title" : "sampleTitle",
    "LastName" : "sampleLastName"
     },
    "CompanyName" : "XXXXX"
}

您能否重新表述您的问题。我想我完全不明白你的意图。

这是我的代码:

@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);
}

如果您想要一个特定的序列化程序,您需要检查:http://www.baeldung.com/jackson-serialize-field-custom-criteria

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2013-02-06
    相关资源
    最近更新 更多