Ответ Spring @RestController уже зафиксирован - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующий код

@RestController
public class TokenRefreshController {
    @Autowired
    TokenAuthenticationService tokenAuthenticationService;

    @ApiOperation(value = "Generate new authentication token using a refresh token")
    @RequestMapping(value = "/token/refresh",
            method = RequestMethod.POST)
    public void refreshToken(@RequestParam("refresh") String refreshToken, HttpServletResponse response) throws IOException {
        System.out.println("WHEN REFRESHING TOKEN THE RESPONSE IS COMMITTED :" + response.isCommitted());
        tokenAuthenticationService.refreshAuthToken(refreshToken,response);
    }
}

В строке, где я печатаю на консоль, это всегда верно.Таким образом, ответ уже зафиксирован еще до входа в мой контроллер.Как я могу получить ответ, который не зафиксирован, потому что я устанавливаю некоторые заголовки и возвращаю ошибки, когда это необходимо, в методе refreshAuthToken.

Как уже упоминалось в комментариях ниже, один из фильтров может фиксировать ответ, но я до сих пор не знаю, как помешать этому фильтру.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы можете изменить URL-адрес RequestMapping и использовать его для обновления токена

0 голосов
/ 13 ноября 2018

, пожалуйста, попробуйте следующий подход, но это применимо для версии с весенней загрузкой.

Вам следует использовать объект ResponseEntity для возврата ваших данных и ключевое слово createYourObject, которое будет состоять из объекта, который вы зададите.

@RestController
public class TokenRefreshController {
    @Autowired
    TokenAuthenticationService tokenAuthenticationService;

    @ApiOperation(value = "Generate new authentication token using a refresh token")
    @RequestMapping(value = "/token/refresh",
            method = RequestMethod.POST)
    public ResponseEntity<createYourObject> refreshToken(@RequestParam("refresh") String refreshToken, HttpServletResponse response) throws IOException {
        System.out.println("WHEN REFRESHING TOKEN THE RESPONSE IS COMMITTED :" + response.isCommitted());
        tokenAuthenticationService.refreshAuthToken(refreshToken,response);
        return new ResponseEntity<createYourObject>(yourObjectResponse,HttpStatus.CREATED);
    }
}
...