【问题标题】:XMl to JSON through java pojo using jacksonXML到JSON通过java pojo使用jackson
【发布时间】:2019-06-06 22:12:34
【问题描述】:

我正在尝试将 xml 转换为 json。首先,我使用以下 xml 创建了 java 类

<CompositeResponse>
   <CompositeIndividualResponse>
      <PersonIdentification>2222</PersonIdentification>
   </CompositeIndividualResponse>
</CompositeResponse>

以下java类如下:

public class Main {
    public CompositeResponse CompositeResponse;
    public CompositeResponse getCompositeResponse() {
        return CompositeResponse;
    }
    public void setCompositeResponse(CompositeResponse CompositeResponse) {
        this.CompositeResponse = CompositeResponse;
    }
}

public class CompositeResponse {
    private List<CompositeIndividualResponse> CompositeIndividualResponse;

public List<CompositeIndividualResponse> getCompositeIndividualResponse() {
    return CompositeIndividualResponse;
}
public void setCompositeIndividualResponse(List<CompositeIndividualResponse> CompositeIndividualResponse) {
    CompositeIndividualResponse = CompositeIndividualResponse;
}
}

public class CompositeIndividualResponse {

    private String Persondentification;

    public String getPersondentification() {
        return Persondentification;
    }
    public void setPersonIdentification (String PersonIdentification) {
      this.PersonIdentification = PersonIdentification; 
    }

}

I am using the following code for conversion: 
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class XMLToJson {
    public static void main(String[] args) throws IOException {
        String content = new String(Files.readAllBytes(Paths.get("test.xml")));
        XmlMapper xmlMapper = new XmlMapper();
        Main poppy = xmlMapper.readValue(content, Main.class);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(poppy);
        System.out.println(json);
    }
}

但我收到以下异常,即无法识别 CompositeIndividualResponse。

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "CompositeIndividualResponse" (class com.test.custom.copy.Main), not marked as ignorable (2 known properties: "CompositeResponse", "compositeResponse"])
 at [Source: (StringReader); line: 3, column: 32] (through reference chain: com.test.custom.copy.Main["CompositeIndividualResponse"])

我相信我的 java pojo 不适合 xml 数据。那么如何定义pojo的集合来解决这个问题,这样我就可以得到以下json:

{  
   "CompositeResponse":{       
      "CompositeIndividualResponse":
      [  
         {  
            "PersonSSNIdentification":"221212501"
         }
      ]
   }
}

【问题讨论】:

    标签: java json xml jackson


    【解决方案1】:

    这样定义你的 POJO,

    public class CompositeResponse {
         private List<CompositeIndividualResponse> compositeIndividualResponse;
    
         public List<CompositeIndividualResponse> getCompositeIndividualResponse() {
              return compositeIndividualResponse;
         }
    
        public void setCompositeIndividualResponse(List<CompositeIndividualResponse> compositeIndividualResponse) {
             CompositeIndividualResponse = compositeIndividualResponse;
         }
    }
    
    public class CompositeIndividualResponse {
        private String personIdentification;
    
        public String getPersonIdentification() {
            return personIdentification;
        }
        public void setPersonIdentification (String personIdentification) {
          this.personIdentification= personIdentification; 
        }
    }
    

    然后更新你的主程序如下,

    public class XMLToJson {
        public static void main(String[] args) throws IOException {
            String content = new String(Files.readAllBytes(Paths.get("test.xml")));
            XmlMapper xmlMapper = new XmlMapper();
            CompositeResponse poppy = xmlMapper.readValue(content, CompositeResponse.class);
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(poppy);
            System.out.println(json);
        }
    }
    

    【讨论】:

    • 是的,你是对的。我不需要 Main.Java。但是我需要定义 Jackson 注释来完成工作。 @JacksonXmlProperty(localName = "CompositeIndividualResponse") @JacksonXmlElementWrapper(localName = "CompositeIndividualResponse",useWrapping = false) compositeIndividualResponse 同样对于 personIdentification 我需要添加以下注释 @JacksonXmlProperty(localName = "PersonIdentification") personIdentification
    • 你能看看我的答案,如果它很好,请为答案投票。
    【解决方案2】:

    字段命名问题,所有字段默认以小写字母开头。 例如:compositeResponse

    为避免此问题,为每个字段添加注释@JsonProperty,如下所示:

        @JsonProperty("persondentification")
        private String Persondentification;
    

    【讨论】:

    • 其实并非如此。我不需要这里的 main.java 类。此外,我需要 Jackson 注释以正确地将 xml 映射到 POJO。请在下面查看我的评论。谢谢
    【解决方案3】:

    解决方案是我不需要 Main.java 类。我还需要添加杰克逊注释来定义 xml 元素。工作代码如下。

    CompositeResponse.java
    
        public class CompositeResponse {
    
            @JacksonXmlProperty(localName = "CompositeIndividualResponse")
            @JacksonXmlElementWrapper(localName = "CompositeIndividualResponse",useWrapping = false)
            private List<CompositeIndividualResponse> compositeIndividualResponse;
    
            public List<CompositeIndividualResponse> getCompositeIndividualResponse() {
                 return compositeIndividualResponse;
            }
    
           public void setCompositeIndividualResponse(List<CompositeIndividualResponse> compositeIndividualResponse) {
               this.compositeIndividualResponse = compositeIndividualResponse;
            }
    
        }
    
    CompositeIndividualResponse.java: 
    
        public class CompositeIndividualResponse {
    
                @JacksonXmlProperty(localName = "PersonIdentification")
                private String personIdentification;
    
                public String getPersonIdentification() {
                    return personIdentification;
                }
                public void setPersonIdentification (String personIdentification) {
                  this.personIdentification= personIdentification; 
                }
        }
    
    XMLToJson.java
    
        public class XMLToJson {
            public static void main(String[] args) throws IOException {
                String content = new String(Files.readAllBytes(Paths.get("test.xml")));
                XmlMapper xmlMapper = new XmlMapper();
                CompositeResponse poppy = xmlMapper.readValue(content, CompositeResponse.class);
                ObjectMapper mapper = new ObjectMapper();
                String json = mapper.writeValueAsString(poppy);
                System.out.println(json);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      相关资源
      最近更新 更多