我有两个班级/表格---客户和地址具有双向的一对一关系。
我从这两个表中获取详细信息,并使用rest控制器将其公开,并且得到以下输出。
但是我想分别使用<List>
和<item>
标签而不是<CustomerList>
和<Customer>
。就像这样-
<CustomerList>
<Customer>
<id>1</id>
<firstName>Banerjee</firstName>
<lastName/>
<gender/>
<date>2012-01-26T09:00:00.000+0000</date>
<addressdto>
<id>1</id>
<city>Purulia</city>
<country>Indiia</country>
</addressdto>
</Customer>
...........
控制器类
@RestController
public class HomeController {
@Autowired
private CustomerService customerService;
@GetMapping(path="/customers",produces= {"application/xml"})
public List<CustomerDto> getCustomers(){
List<CustomerDto> cusDtoList=new ArrayList<>();
cusDtoList=customerService.getCustomers();
return cusDtoList;
}
服务等级
@Service
public class CustomerService {
@Autowired
private CustomerRepository customerRepository;
@Autowired
private EntityToDtoMapper entityToDto;
public List<CustomerDto> getCustomers(){
List<Customer>customerList=customerRepository.findAll();
//CustomerDtoList customerDtoList=new CustomerDtoList();
List<CustomerDto> cusDtoList=new ArrayList<>();
for (Customer customer : customerList) {
CustomerDto customerDto=entityToDto.mapToDto(customer);
//customerDtoList.addCustomerDto(customerDto);
cusDtoList.add(customerDto);
}
return cusDtoList;
}
AddressDto
@JsonIgnoreProperties(ignoreUnknown=true)
public class AddressDto {
private int id;
private String city;
private String country;
...getter/settters and no arg cons/ no annotations
}
CustomerDto
@XmlRootElement
@JsonIgnoreProperties(ignoreUnknown=true)
public class CustomerDto {
private int id;
private String firstName;
private String lastName;
private String gender;
private Date date;
private AddressDto addressdto;
public CustomerDto() {
super();
}
@XmlElement
public AddressDto getAddressdto() {
return addressdto;
}
...other getter/setters..no annotations
MaptoDto类
@Component
public class EntityToDtoMapper {
public CustomerDto mapToDto(Customer customer) {
**getting frm customer and setting it to dto**
return customerDto;
}
最简单的方法是创建一个包含CustomerDtos列表的CustomerList DTO。
public class CustomerList {
@JacksonXmlElementWrapper(localName = "CustomerList")
@JacksonXmlProperty(localName = "Customer")
List<CustomerDto> list;
}
更多示例可以在这里找到:https://mincong.io/2019/03/19/jackson-xml-mapper/
使用@JacksonXmlRootElement
注释设置XML输出的名称。
@JacksonXmlRootElement(localName = "CustomerList")
public class CustomerDTOList {
@JacksonXmlProperty(localName = "Customer")
@JacksonXmlElementWrapper(useWrapping = false)
List<CustomerDto> list;
}
使用@JacksonXmlProperty和@JacksonXmlElementWrapper批注,我们确保我们将Customer元素嵌套在CustomerList元素的CustomerList元素中。 CustomerDTOList bean是一个帮助器bean,用于获取更好的XML输出。
@JacksonXmlRootElement(localName = "Customer")
public class CustomerDto {