Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC。具有空正文的ResponseByAdvice用法未按预期工作?_Java_Spring_Spring Mvc - Fatal编程技术网

Java SpringMVC。具有空正文的ResponseByAdvice用法未按预期工作?

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

我有一个控制器,它有一个返回类型为void的方法

@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
时,也不会设置头。 我读过,但是关于“为什么会发生这种情况?”的对话没有得到任何答案。当我可以自己看的时候,你能解释一下为什么或者分享一下资料来源吗