Spring Boot如何为单个端点设置响应头(不返回ResponseEntity)
解决方案:无需返回ResponseEntity添加单个端点响应头
你之前用@GetMapping(headers = "Cache-Control=max-age=3600")的方式是错误的——这个headers属性是用来匹配请求头的,只有当请求携带了该指定头时,这个方法才会被触发,所以没带这个头的请求会出现404,它根本不是用来设置响应头的。
要在不修改返回类型为ResponseEntity的前提下给单个端点加响应头,最简单的方式是在方法参数中注入HttpServletResponse,直接通过它设置响应头:
@RequiredArgsConstructor @RestController @RequestMapping("/dds/users") public class TypeController { private final UserService userService; private final UserMapper userMapper; @GetMapping() public List<UserFullDto> getAll(HttpServletResponse response) { // 设置响应头 response.setHeader("Cache-Control", "max-age=3600"); return userService.getAll().stream().map(userMapper::mapToFullDto).toList(); } }
另外还有一种方式是使用@ControllerAdvice结合ResponseBodyAdvice,但这种方式更适合批量处理多个端点,如果你只需要给这一个端点加头,上面的HttpServletResponse方式最直接。
内容的提问来源于stack exchange,提问作者Bjop
相关产品推荐
相关产品推荐

