Вы можете расширить HandlerInterceptorAdapter
, что:
Абстрактный класс адаптера для интерфейса AsyncHandlerInterceptor, для
упрощенная реализация перехватчиков «только-только / после-только».
@Component
public class MyHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// then access your request body (xml content) to update it
// see link bellow for how to retrieve an xml content from the HttpServletRequest
return super.preHandle(request, response, handler);
}
}
После этого вы переопределяете addInteceptors
из WebMvcConfigurerAdapter
, создавая собственный класс, который расширяется от WebMvcConfigurerAdapter
:
@Configuration
public class CustomWebMvc extends WebMvcConfigurerAdapter {
@Autowired
MyHandlerInterceptor myHandlerInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myHandlerInterceptor);
super.addInterceptors(registry);
}
}
Чтобы узнать, как извлечь содержимое XML из вашего запроса HttpServletRequest, прочитайте это Получить отправленный XML из объекта HttpServletRequest
Редактировать
Если ваша цель состоит в том, чтобы просто получить тело http ( xml content ) и затем делать то, что вы хотите с ним внутри вашего контроллера, вы можете просто вставить InputStream
или Reader
в Метод обработчика @RequestMapping (который является методом вашего контроллера) примерно так:
@PostMapping(value = "/topics/xml", consumes = "application/xml")
public void getXmlRequest(InputStream data) throws IOException {
String requestBody = IOUtils.toString(data);
// format the xml and do something with it
}
Spring Web Doc: Методы обработки :
@ Методы-обработчики RequestMapping имеют гибкую сигнатуру и могут выбирать из диапазона поддерживаемых аргументов метода контроллера и возвращаемых значений.
![enter image description here](https://i.stack.imgur.com/j7W2x.png)