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

标签 java spring spring-mvc spring-restcontroller

这将返回 200 OK,内容长度:0

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

}

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

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

最佳答案

您可以使用 @ResponseStatus注解。这样您就可以拥有一个 void 方法,而不必构建 ResponseEntity。

@DeleteMapping(value = HERO_MAPPING)
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void delete(@PathVariable Long heroId) {
    heroService.delete(heroId);
}

顺便说一句,当对象存在时返回 200,否则返回 204,这对于 API REST 设计来说有点不寻常。当未找到请求的对象时,通常会返回 404(未找到)。这可以使用 ControllerAdvice 来实现。

在 Spring REST 中,最好使用异常处理程序来处理异常,而不是使用逻辑来决定响应状态等。这是使用 @ControllerAdvice 注释的示例:http://www.jcombat.com/spring/exception-handling-in-spring-restful-web-service

关于java - 使用 spring @RestController 在 null 上返回 HTTP 204,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32396884/

相关文章:

java - 如何给二维数组赋值?

java - 在 Controller 方法中的方法上使用 @PreAuthorize 注释

mysql - 无法 Autowiring 字段 : com. srk.dao.UserDao com.srk.service.UserServiceImpl.userDao; org.springframework.orm.hibernate4.LocalSessionFactoryBuilder

java - 作为 WAR 运行 Spring Webflux 应用程序

java - 使用自定义查询进行 JPA 优化

java - 如何解决 for 循环中的局部引用变量?

java - 没有 JKS 的嵌入式 Jetty 上的 TLS

java - 如何在 Spring Data Jpa 中使用投影返回自定义对象?

java 。具有静态成员的嵌套类。我们如何规避它?

java - Spring MVC 3.2.5 无法识别的字段 jackson