Как использовать XML-данные с помощью Java и Spring Boot

#java #xml #spring-boot #jackson

#java #xml #spring-boot #джексон

Вопрос:

Мне нужно использовать XML-данные. Мой XML-фрагмент:

 <TallyTransferResponse>
    <Response>
        <TransactionDocumentNo>iut-1</TransactionDocumentNo>
        <FromLocation>Bangalore</FromLocation>
        <ToLocation>Noida</ToLocation>
    </Response>
    <Response>
        <TransactionDocumentNo>iut-2</TransactionDocumentNo>
        <FromLocation>Bangalore</FromLocation>
        <ToLocation>Mumbai</ToLocation>
    </Response>
</TallyTransferResponse>
  

Вот код для класса сущности:

 @Entity
public class TallyTransferResponse{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String transaction_document_no;
    private String from_location;
    private String to_location;
public TallyTransferResponse() {}
    /**
     * @param transaction_document_no
     * @param from_location
     * @param to_location
     */
    public TallyTransferResponse(String transaction_document_no, String from_location, String to_location) {
        this.transaction_document_no = transaction_document_no;
        this.from_location = from_location;
        this.to_location = to_location;
    }
//Getters and Setters
}
  

Я застрял в том, как написать сервис и контроллер для использования этого XML.

Комментарии:

1. Привет, не могли бы вы указать более подробно, как вы хотите их использовать, я имею в виду, есть ли служба REST, которая выдает этот XML в качестве ответа, или в файловой системе есть какой-то файл, или эти XML-данные поступают из какого-либо другого источника, например, из очереди?

2. Привет, я пытаюсь использовать XML в качестве ответа, поступающего от Tally.

Ответ №1:

Вы можете использовать spring RestTemplate для выполнения запроса (get / post) к конечной точке и получения ответа в виде строки, например:

 final ResponseEntity<String> response = restTemplate.getForEntity(endpointUrl, String.class);
  

И сопоставьте его с XML или JOSN.
Более простой версией этого может быть запрос и ожидание модели данных в ответе, например:

 final ResponseEntity<Company> response = restTemplate.getForEntity(endpointUrl, Company.class);
  

В этом случае вам нужно будет добавить некоторую аннотацию привязки XML к вашему классу модели, например:

 @XmlRootElement(name="company", namespace="some.namespace" )
@XmlAccessorType(XmlAccessType.NONE)
public class Company {
@XmlAttribute(name="id")
private Integer id;
@XmlElement(name="company_name")
private String companyName;
.....
//the rest of the class is omitted
  

Вы можете запросить ответ JSON от конечной точки службы, добавив к запросу один дополнительный заголовок, например:

 Accept: application/json
  

Тогда класс модели данных не может опустить все аннотации привязки XML.