我试图让当控制器方法响应类型为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。我看到了这个答案,Return HTTP 204 on null with spring @RestController,但是没有回答我的具体问题,即如何对具有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;
}
}
Spring MVC:如何获取请求的处理程序方法 - java我正在尝试根据Spring @RequestMapping注释方法上存在的注释实现一些逻辑。因此,我的方法中有一个HttpServletRequest实例,我想问一下spring“给我一个方法,该方法将被调用以处理此请求”,因此我可以使用反射API来询问是否存在我的注释,因此我可以更改处理。有什么简单的方法可以从Spring MVC获取此信息? java大神…
运行项目后无法在IntelliJ中打开静态页面(Spring MVC) - java首先,我可以像这样通过intellij按钮查看htmlenter image description here然后当我单击按钮intellij显示浏览器错误enter image description here然后我运行tomcat,然后单击浏览器按钮enter image description here我是一个初学者,我不知道为什么会发生 参考方案 您…
Spring MVC Controller测试,并模拟许多类 - java我们的系统中有许多Controller,还有许多Spring Data存储库。我想为通过我的MVC上下文运行的控制器编写测试。但是,必须手动模拟系统中的每个服务和存储库似乎很麻烦,而且不合适,因此我可以测试控制器例如FooControllerTest.java@RunWith(SpringJUnit4ClassRunner.class) @WebAppCon…
在每个jsp页面中包括CSS和js文件 - java我在每个jsp文件中都包含常见的css和js文件。那么在每页中包含它们的最佳实践是什么?我曾经使用<%@ include file="header.jsp" %>,但是我想知道这是否是最好,最干净的方法。 参考方案 最好的解决方案是使用JSP标记文件。它允许使用标签文件封装可重复使用的内容:Java doc ref这是一个很好…
将JSON发布到Spring MVC Controller返回400错误请求 - java我想发布JSON并让Jackson将其转换为POJO,但是现在我什至无法发布简单的String参数。我正在使用Jackson 2.3.2(jackson-core和jackson-databaind)我正在使用Spring 3.2.8.RELEASE(spring-context,spring-webmvc)我的控制器如下所示:@RequestMapping…