gpt4 book ai didi

java - Spring MVC - 当休息 Controller 响应类型为空时自动返回 204

转载 作者:行者123 更新时间:2023-12-04 16:19:15 25 4
gpt4 key购买 nike

当 Controller 方法响应类型为 void 时,我试图让 spring 自动返回 HTTP 状态 204。例如:

假设我有一个这样的 Controller 方法:

@DeleteMapping(value = "/{heroId}")
public void delete(@PathVariable Long heroId) {
heroService.delete(heroId);
}

我正在寻找一种无需使用 @ResponseStatus(value = HttpStatus.NO_CONTENT) 来注释方法的自动返回 204 的方法。

是否可以使用处理程序或 AOP 或其他工具来执行此操作?

PS。我看到了这个答案,Return HTTP 204 on null with spring @RestController ,但没有回答我关于如何为具有 void 返回类型的方法实现这一点的具体问题。此外,此方法应该适用于没有输入参数的方法。

最佳答案

我能够根据 Yoshua 提供的链接实现解决方案。我不是 100% 确定实现细节,但它对我有用。

这会捕获所有返回类型为 void 的 Controller 方法的响应,并将其 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;
}
}

关于java - Spring MVC - 当休息 Controller 响应类型为空时自动返回 204,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47269292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com