java Sping Boot 在单个endopint上设置响应头

2ul0zpep  于 2023-05-12  发布在  Java
关注(0)|答案(2)|浏览(101)

我尝试将响应头添加到单个端点。
这是我的控制器类。

@RequiredArgsConstructor
@RestController
@RequestMapping("/dds/users")
public class TypeController {
    private final UserService userService;
    private final UserMapper userMapper;

    @GetMapping()
    public List<UserFullDto> getAll() {
        return userService.getAll().stream().map(userMapper::mapToFullDto).toList();
    }
}

有没有一个解决方案可以添加一个响应头而不使methode返回一个ResponseEntity<>
我不想用这个:

@GetMapping()
public ResponseEntity<List<UserFullDto>> getAll() {
    var users = userService.getAll().stream().map(userMapper::mapToFullDto).toList();
    return new ResponseEnity.ok().header().body(users);
}

我试过这个没有成功(给我一个404)

@GetMapping(headers = "Cache-Control=max-age=3600")
public ResponseEntity<List<UserFullDto>> getAll() {
    ...
}
lhcgjxsq

lhcgjxsq1#

您可以在没有ResponseEntity的情况下执行此操作。将类的签名更改为

@GetMapping()
public public List<UserFullDto>getAll(HttpServletRequest request, HttpServletResponse response) {

你可以使用response.addHeader(name, value)

x6h2sr28

x6h2sr282#

看看这是否有帮助!
响应实体重载了几个参数,为了更好的可读性,您可以创建一个模块化方法,该方法创建并返回此Map,以便可以重用它。

MultivaluedMap<String,String> responseHeaders =new MultivaluedHashMap<>();
responseHeaders.add("content-type","application/json");
responseHeaders.add("somethingElse","value");
return new ResponseEntity<>(users, responseHeaders, HttpStatus.OK);

相关问题