簡體   English   中英

Spring MVC-其余控制器響應類型為空時自動返回204

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM