XML в JSON через Java Pojo с использованием Джексона - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь конвертировать XML в JSON. Сначала я создал класс Java, используя следующий xml

<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"
         }
      ]
   }
}

Ответы [ 3 ]

1 голос
/ 07 июня 2019

Определите, как вы 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);
    }
}
0 голосов
/ 08 июня 2019

Решение в том, что мне не нужен класс 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);
        }
    }
0 голосов
/ 07 июня 2019

Проблема в именовании полей, все поля по умолчанию начинаются с маленькой буквы. например: compositeResponse

Чтобы избежать этой проблемы, добавьте аннотацию @JsonProperty для каждого поля, например:

    @JsonProperty("persondentification")
    private String Persondentification;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...