Используя Spring Boot (2.1.4) и Джексона (2.9.8), я пишу API, который использует и производит XML, используя @RestController и @RequestBody.
Использование XML работает, но работает слишком хорошо: если корневой элемент не совпадает с элементом моего Java-объекта (аннотирован @JacksonXmlRootElement localName), ему все же удается отменить вызов объекта.
Контроллер покоя выглядит так:
@RestController
@RequestMapping(value = "api", produces = MediaType.APPLICATION_XML_VALUE, consumes = MediaType.APPLICATION_XML_VALUE)
public class PutawayApiController extends BaseController {
private final ModelSampleService sampleService;
@Autowired
public PutawayApiController(ModelSampleService sampleService) {
this.sampleService = sampleService;
}
@PostMapping(value = "/putaway_close")
public PutawayCloseResponse putawayClose(@RequestBody PutawayCloseRequest request) {
return sampleService.putawayCloseResponse();
}
}
С объектом запроса:
@Data
@EqualsAndHashCode(callSuper = false)
@JacksonXmlRootElement(localName = "putawayCloseRequest")
public class PutawayCloseRequest extends BaseRequest {
private String shipmentRef;
}
и он наследуется от:
@Data
public abstract class BaseRequest {
private String userId;
}
При выполнении следующего вызова в Почтальоне он вызывает мою точку отладки, как показано на следующем рисунке:
Почему он не работает, хотя корневой элемент явно не тот, который я настроил? Есть ли способ разрешить отклонение демаршаллинга, когда корневой элемент не совпадает?
Заранее спасибо.