Я хотел бы написать службу отдыха, которая принимает и производит XML или JSON на основе информации из заголовков.Для этого я следовал одному из учебников .Проблема в том, что когда я пытаюсь прочитать поля dto в Spring-контроллере, все они устанавливаются в null.
В целях тестирования я отправляю в тело DTO, а в контроллере возвращаю его объединяющую строку Changed
на двух своих полях.
В теле я отправляю:
<?xml version="1.0" encoding="UTF-8"?>
<name>name</name>
<description>description</description>
Однако я получаю:
<Dto name="null Changed" description="null Changed"/>
Я отправляю запрос почтальоном:
Вот моя конфигурация:
Контроллер
@RestController
public class Controller {
@RequestMapping(value = "/endpoint", method = RequestMethod.POST,
consumes = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE},
produces = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE})
public Dto getAndReturnEntity(@RequestBody Dto dto) {
dto.setName(dto.getName() + " Changed");
dto.setDescription(dto.getDescription() + " Changed");
return dto;
}
}
DTO
@JacksonXmlRootElement
public class Dto {
@JacksonXmlProperty(isAttribute = true) // I also tried without it
private String name;
@JacksonXmlProperty(isAttribute = true)
private String description;
// getters and setters ommited for brevity
}
Конфигурация для пружины
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(true).
favorParameter(false).
parameterName("mediaType").
ignoreAcceptHeader(false).
useJaf(false).
defaultContentType(MediaType.APPLICATION_JSON).
mediaType("xml", MediaType.APPLICATION_XML).
mediaType("json", MediaType.APPLICATION_JSON);
}
}
Соответствующая часть pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>