- Добавить производит = "application / xml" внутри @RequestMapping.
@RequestMapping(value="/api", method=RequestMethod.GET, produces=application/xml")
- Вам необходимо добавить количество JAXB-аннотаций в ваш класс бинов (VisaResponseHeader), чтобы позволить его маршалировать в XML.
@ XmlRootElement: Эта аннотация используется в классе верхнего уровня для обозначения корневого элемента в документе XML.Атрибут имени в аннотации не является обязательным.Если не указано, имя класса используется в качестве корневого XML-элемента в документе.
@ XmlAttribute: Эта аннотация используется для указания атрибута корневого элемента.
@ XmlElement: Эта аннотация используется для свойств класса, которые будут подэлементами корневого элемента.
HelloWorldRestController .java
@RestController
public class HelloWorldRestController {
@Autowired
ApiService apiService;
@RequestMapping(value = "/api", method = RequestMethod.GET)
public ResponseEntity<String> listAllUsers() {
// get data from database
VisaResponse visaResponse = apiService.visaresponse();
// convert bean to XML
String xmlResponse = jaxbObjectToXML(visaResponse);
return new ResponseEntity<>(xmlResponse, HttpStatus.OK);
}
private static String jaxbObjectToXML(VisaResponse customer) {
String xmlString = "";
try {
JAXBContext context = JAXBContext.newInstance(VisaResponse.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter sw = new StringWriter();
m.marshal(customer, sw);
xmlString = sw.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlString;
}
}
VisaResponse.java
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class VisaResponse {
@XmlElement
private int id;
// for testing purpose. Remove once database integration is done and data is received via service and repository.
public VisaResponse() {
id = 3;
}
}
Нет необходимости в классе VisaResponseHeader.java.
Ожидаемый результат (проверено почтальоном)