SpringBoot - добавить заголовки управления кэшем в методы Rest - PullRequest
0 голосов
/ 15 октября 2018

У меня есть базовое приложение SpringBoot 2.0.5.RELEASE.Используя Spring Initializer, JPA, встроенный Tomcat, шаблонизатор Thymeleaf и пакет в качестве исполняемого файла JAR

Я создал этот метод Rest:

  @GetMapping(path = "/users/notifications", consumes = "application/json", produces = "application/json")
    public ResponseEntity<List<UserNotification>> userNotifications(
            @RequestHeader(value = "Authorization") String authHeader) {

        User user = authUserOnPath("/users/notifications", authHeader);

        List<UserNotification> menuAlertNotifications = menuService
                .getLast365DaysNotificationsByUser(user);

        return ResponseEntity.ok(menuAlertNotifications)
                .cacheControl(CacheControl.maxAge(60, TimeUnit.SECONDS));;

    }

и хочу добавить заголовки элемента управления кэшем, но я не знаю, как ... Я получил ошибку компиляции:

Multiple markers at this line
    - The method cacheControl(CacheControl) is undefined for the type 
     ResponseEntity<List<UserNotification>>
    - CacheControl
    - cacheControl

Я также добавляю это свойство в application.properties

security.headers.cache = false

1 Ответ

0 голосов
/ 15 октября 2018

Когда вы используете ResponseEntity.ok(T body), тип возвращаемого значения - ResponseEntity<T>, так как это быстрый способ добавления данных к части тела ResponseEntity.

Вам нужен объект-строитель, который создается с помощью ResponseEntity.ok() без параметра, который возвращает объект Builder.Затем вы сами добавляете свои данные с помощью метода body.

Таким образом, ваш код должен выглядеть следующим образом

  @GetMapping(path = "/users/notifications", consumes = "application/json", produces = "application/json")
    public ResponseEntity<List<UserNotification>> userNotifications(
            @RequestHeader(value = "Authorization") String authHeader) {

        User user = authUserOnPath("/users/notifications", authHeader);

        List<UserNotification> menuAlertNotifications = menuService
                .getLast365DaysNotificationsByUser(user);


        return ResponseEntity.ok().cacheControl(CacheControl.maxAge(60, TimeUnit.SECONDS)).body(menuAlertNotifications);


    }
...