Пожалуйста, не вините меня за некрофилии, но я создал пример, который делает именно то, что вам нужно: https://github.com/sergpank/spring-boot-xml
Короче говоря, вы должны сказать, к платформе, что вам нужно XML в заголовке запроса POST (если вы используете инструмент, как Почтальон для тестирования):
Accept : application/xml
Content-Type : application/xml
ИЛИ это будет сделано автоматически, если будет создана XML сообщение конвертер RestTemplate:
public class RestfulClient {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate(Arrays.asList(new Jaxb2RootElementHttpMessageConverter()));
Contact random = restTemplate.getForObject("http://localhost:8080/contact/random", Contact.class);
System.out.println("Received: " + random);
Contact edited = restTemplate.postForObject("http://localhost:8080/contact/edit", random, Contact.class);
System.out.println("Edited: " + edited);
}
}
и не забудьте аннотировать вам класс с @XmlRootElement и @XmlElement аннотациями (если вы предпочитаете JAXB):
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Setter
@XmlRootElement
public class Contact implements Serializable {
@XmlElement
private Long id;
@XmlElement
private int version;
@Getter private String firstName;
@XmlElement
private String lastName;
@XmlElement
private Date birthDate;
public static Contact randomContact() {
Random random = new Random();
return new Contact(random.nextLong(), random.nextInt(), "name-" + random.nextLong(), "surname-" + random.nextLong(), new Date());
}
}
методы в контроллере должны также иметь @RequestBody аннотацию XML и распаковать @ResponseBody аннотацию к маршалу ответ обратно XML.
@Controller
@RequestMapping(value="/contact")
public class ContactController {
final Logger logger = LoggerFactory.getLogger(ContactController.class);
@RequestMapping("/random")
@ResponseBody
public Contact randomContact() {
return Contact.randomContact();
}
@RequestMapping(value = "/edit", method = RequestMethod.POST)
@ResponseBody
public Contact editContact(@RequestBody Contact contact) {
logger.info("Received contact: {}", contact);
contact.setFirstName(contact.getFirstName() + "-EDITED");
return contact;
}
}
То, что возвращается, зависит от ваших принимающих заголовков. Убедитесь, что вы отправляете запрос о том, что хотите XML. Для этого вам не нужна дополнительная настройка. Также ваш код не имеет ничего общего с Spring Data Rest, поскольку вы пишете все самостоятельно, а не полагаетесь на конечные точки Spring Spring. –
Аннотации «@ RequestMapping» в методе репозитория не только бесполезны, но и не имеют никакого смысла. Репозиторий уже отображен. – zeroflagL