[英]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.