Уничтожение Джексона завершается успешно, несмотря на неправильный корневой элемент XML - PullRequest
0 голосов
/ 26 апреля 2019

Используя 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;

}

При выполнении следующего вызова в Почтальоне он вызывает мою точку отладки, как показано на следующем рисунке: Unmarshalling triggered although incorrect root element name

Почему он не работает, хотя корневой элемент явно не тот, который я настроил? Есть ли способ разрешить отклонение демаршаллинга, когда корневой элемент не совпадает?

Заранее спасибо.

1 Ответ

0 голосов
/ 26 апреля 2019

Поскольку документация , то есть javadoc @JacksonXmlRootElement говорит:

Аннотация, которая может использоваться для определения имени корневого элемента, используемого дляобъект корневого уровня при сериализации , который обычно использует имя типа (класса).

Он никогда не претендует на использование его для проверки при десериализации.

...