Java SpringMVC。具有空正文的ResponseByAdvice用法未按预期工作?
我有一个控制器,它有一个返回类型为void的方法Java SpringMVC。具有空正文的ResponseByAdvice用法未按预期工作?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个控制器,它有一个返回类型为void的方法 @RestController @RequestMapping(path = "/hello") public class HelloController { @DeleteMapping public void foo() { // do anything } } 和回应建议 @RestControllerAdvice public class Advice implements
@RestController
@RequestMapping(path = "/hello")
public class HelloController {
@DeleteMapping
public void foo() {
// do anything
}
}
和回应建议
@RestControllerAdvice
public class Advice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> clazz) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter methodParameter,
MediaType mediaType, Class<? extends HttpMessageConverter<?>> clazz,
ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
serverHttpResponse.getHeaders().set("some-header", UUID.randomUUID().toString());
return o;
}
}
@RestControllerAdvice
公共类建议实现ResponseByAdvice{
@凌驾
公共布尔支持(MethodParameter,类>clazz){
返回true;
}
@凌驾
BodyWrite之前的公共对象(对象体、方法参数、方法参数、,
MediaType MediaType,类>类别,
ServerHttpRequest ServerHttpRequest,ServerHttpResponse ServerHttpResponse){
serverHttpResponse.getHeaders().set(“某些头”,UUID.randomUUID().toString());
返回o;
}
}
这个通知被调用,在这种情况下,对象体
为空,但是当我在Postman中检查响应头时,我看不到在代码中添加的头。但是,如果我将public void foo()
更改为返回String
,而不是void
,那么我的所有标题都会按预期设置。当控制器方法返回null
时,也不会设置头。
我读过,但是关于“为什么会发生这种情况?”的对话没有得到任何答案。当我可以自己看的时候,你能解释一下为什么或者分享一下资料来源吗