Я ищу способ преобразования XML на основе шаблона xml, предоставленного пользователем.У меня есть служба Springboot, которая генерирует вывод, вот пример bsic, но есть дополнительные вложенные элементы под тегом «Продукт» с налогами и т. Д., А также для этой позиции ...
- EntityКлассы
OrderHeader
package com.example.microservice.dao;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonProperty;
@Entity
@Table(name="ORDER_HEADER")
public class OrderHeader {
@Id
@Column(name="ORDER_HEADER_KEY", nullable=false)
private String orderHeaderKey;
@Column(name="ORDER_NO", nullable=false)
private String orderNo;
@Column(name="ENTERPRISE_KEY", nullable=false)
private String enterpriseKey;
@Column(name="SHIP_TO_KEY", nullable=false)
private String shipToKey;
@Column(name="PAYMENT", nullable=false)
private String payment;
@Column(name="AUTHORISED", nullable=false)
private String authorised;
@Column(name="CUSTOMER", nullable=false)
private String customer;
@OneToMany(mappedBy="oHeader")
private List<OrderLine> orderlines;
public OrderHeader() {
super();
// TODO Auto-generated constructor stub
}
public OrderHeader(String orderHeaderKey, String orderNo, String enterpriseKey, String shipToKey) {
super();
this.orderHeaderKey = orderHeaderKey;
this.orderNo = orderNo;
this.enterpriseKey = enterpriseKey;
this.shipToKey = shipToKey;
}
// Getters & Setters
//To String method override
}
OrderLine Класс сущности
package com.example.microservice.dao;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="ORDER_LINE")
public class OrderLine {
@Id
@Column(name="ORDER_LINE_KEY")
private String orderLineKey;
@Column(name="ORDER_HEADER_KEY")
private String orderHeaderKey;
@Column(name="ITEM_ID")
private String itemID;
@Column(name="PRIME_LINE_NO")
private String primeLineNo;
@Column(name="ORDERED_QTY")
private String orderedQty;
@Column(name="LINE_TOTAL")
private String lineTotal;
@ManyToOne
@JoinColumn(name = "ORDER_HEADER_KEY",referencedColumnName="ORDER_HEADER_KEY", insertable=false, updatable=false)
private OrderHeader oHeader;
// Geters & Setters
// To String override
}
Метод контроллера MicroService
@RestController
public class MicroServiceController {
@Autowired
OrderHeaderRepository orderHeaderRepo;
@Autowired
OrderLineRepository orderLineRepo;
public MicroServiceController() {
// TODO Auto-generated constructor stub
}
@RequestMapping(path="/order/{orderID}",
method= {RequestMethod.POST})
public List<OrderHeader> orderInfoID(@PathVariable(name="orderID") String orderID, @RequestBody String userPreferedTemplate) {
System.out.println("API output template from user----->"+userPreferedTemplate);
List<OrderHeader> oH = orderHeaderRepo.findByOrderHeaderKey(orderID);
System.out.println("JPA Query output for order entity \n"+oH.toString());
return oH;
}
}
Ответ на вышеприведенный код такой же, как и ниже, с возвращением целых атрибутов в порядке и на уровне продукта.
<Order OrderNumber="223344" Customer="Bob" Payment="CreditCard" Authorised="Y">
<Product Line="1" ProductId="Item_1001" Quantity="2.00" LineTotal="200" />
<Product Line="2" ProductId="Item_1002" Quantity="2.00" LineTotal="400" />
<Product Line="3" ProductId="Item_1003" Quantity="2.00" LineTotal="600" />
</Order>
Пользователь отправляет запрос POST в конечную точку вместе с шаблоном, указывающим интересующие его атрибуты:
POSTMAN_REQ_IMAGE
Запрошенные пользователем атрибуты взамен
<Order OrderNumber="" >
<Product Line="" ProductId="" />
</Order>
На основе шаблона, полученного от пользователя веб-службы на шаге 4, возможно ли обрезать выходные данные в методе контроллера step2 и отправлять только соответствующие элементы и атрибуты в ответ.
<Order OrderNumber="223344" >
<Product Line="1" ProductId="Item_1001" />
<Product Line="2" ProductId="Item_1002" />
<Product Line="3" ProductId="Item_1003" />
<Product Line="4" ProductId="Item_1004" />
</Order>
** если пользователь пропустит недопустимый тег в шаблоне
<Order OrderNumber="" >
<ProductLINESSSS Line="" ProductId="" />
</Order>
, тогда такие теги будут игнорироваться, и вывод будет выглядеть как
<Order OrderNumber="223344" >
</Order>
Причиной этого является Заказ, поскольку организация имеет отношения с продуктами, адресом доставки, адресом для выставления счета и т. Д., Платежами ... для пользователя, который хочет получить информацию о клиенте, используя № заказа, остальную информацию о продукте, адрес, платежне имеет значения.для приложений, которые хотят получить продукт, могут предоставить шаблон соответственно.
Также
Я не уверен, что у JPA есть что-то для достижения этого или преобразование xslt может это сделать, но будет признателен за правильные данныеподход к достижению этого.