相关疑难解决方法(0)

使用spring @RestController在null上返回HTTP 204

这将返回200 OK,Content-Length:0

@RestController
public class RepoController {
    @RequestMapping(value = "/document/{id}", method = RequestMethod.GET)
    public Object getDocument(@PathVariable long id) {
       return null;
    }

}
Run Code Online (Sandbox Code Playgroud)

简单地说,我希望它返回204 No Content on null.

有没有办法强制spring-mvc/rest在null而不是200时返回204?我不想更改每个rest方法以返回ResponseEntity或类似的东西,只将null映射到204

java spring spring-mvc spring-restcontroller

23
推荐指数
4
解决办法
3万
查看次数

在Spring MVC中对Json响应进行后处理

我有几个控制器使用@ResponseBody注释返回相同的通用Response对象,如下所示:

@RequestMapping(value = "/status", method = RequestMethod.GET)
    @Transactional(readOnly = true)
    public @ResponseBody Response<StatusVM> status()
Run Code Online (Sandbox Code Playgroud)

在返回Response之后,我需要在每个控制器上执行操作.此操作将使用新数据丰富Response对象.

我不想重复代码,所以我需要单点干预.我认为我可以用拦截器做到这一点,但是,根据文档http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor这样做与@ResponseBody不协调:

请注意,HandlerInterceptor的postHandle方法并不总是非常适合与@ResponseBody和ResponseEntity方法一起使用.在这种情况下,HttpMessageConverter在调用postHandle之前写入并提交响应,这使得无法更改响应,例如添加标头.相反,应用程序可以实现ResponseBodyAdvice并将其声明为@ControllerAdvice bean或直接在RequestMappingHandlerAdapter上配置它.

我无法找到这个技术的例子,有人可以帮助我吗?

作为替代方案,我可以使用方面,但是我需要注释每个控制器,这是我想要避免的.

json controller spring-mvc interceptor

17
推荐指数
1
解决办法
8749
查看次数