【发布时间】:2020-02-16 09:31:46
【问题描述】:
当执行返回类型为 Unit 的方法时,我希望 spring 将 204 NO CONTENT 放在响应中的状态代码上,但它总是返回 200 OK。有没有办法在全球范围内改变这种行为?我不想为每个 Unit 方法添加 ResponseStatus 注释。
@RestController()
@RequestMapping("/{role:(?:veterinarian\\b|admin\\b)}")
class EmployeeController(
private val userService: UserService
) {
@PostMapping(consumes = [MediaType.APPLICATION_JSON_UTF8_VALUE])
fun hire(@RequestBody employeeDTO: EmployeeDTO, @PathVariable role: String): Unit {
if (employeeDTO.user_role != role)
throw ResponseStatusException(HttpStatus.BAD_REQUEST)
else
userService.addNewUser(EmployeeDAO.build(employeeDTO))
}
}
更新:
当状态响应为 200 OK 并且它似乎工作时,我最终使用过滤器检查内容类型是否未定义。
这是过滤代码
@Component
public class NoContentFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
filterChain.doFilter(httpServletRequest, httpServletResponse);
if (httpServletResponse.getContentType() == null ||
httpServletResponse.getContentType().equals("")) {
if ( httpServletResponse.getStatus() == 200 ) {
httpServletResponse.setStatus(HttpStatus.NO_CONTENT.value());
}
}
}
}
【问题讨论】:
-
请参考这篇文章:stackoverflow.com/questions/32396884/… 有几个建议可能对你有帮助
-
我将尝试使用过滤器调整答案。我添加了一项检查以确保响应状态为 200,这样它就不会干扰正文可能为空的其他响应(如错误)
标签: spring spring-boot kotlin