[英]Why Spring RestController POST method returns 200 instead of 204 when return type is void?
[英]Spring MVC - Automatically return 204 when rest controller response type is void
我试图让当控制器方法响应类型为void
时spring自动返回HTTP Status 204。 例如:
假设我有一个像这样的控制器方法:
@DeleteMapping(value = "/{heroId}")
public void delete(@PathVariable Long heroId) {
heroService.delete(heroId);
}
我正在寻找一种自动返回204的方法,而不必使用@ResponseStatus(value = HttpStatus.NO_CONTENT)
对该方法进行注释。
是否可以使用处理程序或AOP或其他工具来执行此操作?
PS。 我看到了这个答案, 使用spring @RestController在null上返回HTTP 204 ,但没有回答我的特定问题,即如何对具有void
返回类型的方法实现此问题。 同样,此方法应与没有输入参数的方法一起使用。
我能够根据Yoshua提供的链接实施解决方案。 我不确定100%的实现细节,但是它对我有用。
这将捕获所有具有返回类型为void
的控制器方法的响应,并将其HTTP状态更改为204。
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
@ControllerAdvice
public class NoContentControllerAdvice implements ResponseBodyAdvice<Void> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
if(returnType.getParameterType().isAssignableFrom(void.class)) {
return true;
}
return false;
}
@Override
public Void beforeBodyWrite(Void body, MethodParameter returnType, MediaType mediaType,
Class<? extends HttpMessageConverter<?>> converterType, ServerHttpRequest request, ServerHttpResponse response) {
if(returnType.getParameterType().isAssignableFrom(void.class)) {
response.setStatusCode(HttpStatus.NO_CONTENT);
}
return body;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.