Spring Custom Filter для фильтрации ответа перед отправкой клиенту - PullRequest
0 голосов
/ 03 октября 2018

Я новичок в фильтре Spring Boot

Мне нужно изменить ответ сервлета (impl) на какой-то шаблон.

Например, GetProductImpl даст ответ

{
      "id": 72167,
      "merchantId": 3,
      "amount": 1,
      "state": "Unused"
}

Поэтому, прежде чем он отправит обратно клиенту, мне нужно изменить его на (это как бы поместить ответ под module ) (для всехответ всем сервлетом)

{
"module":[{
      "id": 72167,
      "merchantId": 3,
      "amount": 1,
      "state": "Unused"
    }],
"success":true,
"errorCode":null,
"notSuccess":false
}

Я ищу любой метод, который может позволить мне сделать это, потому что нет смысла делать это внутри ImpL, потому что если это так, мне нужно сделать для всех ImpL (которыйэто много и нежизнеспособно).

Если у кого-то есть какой-либо другой метод, который может достичь этого, то может, потому что я не знаю, какой подход предпринять, чтобы сделать это (пример Java также подойдет).

Спасибо.

Мой нынешний подход к использованию фильтра, похоже, ударил по стене, потому что я использую addFilter, addFilterBefore или даже addFilterAfter, все они должны иметь класс out filter, который я не знаю, что это такое, и сосредоточитьсяо безопасности в сети ( UsernamePasswordAuthenticationFilter :: class.java ).

.addFilterBefore(JWTAuthenticationFilter(tokenAuthenticationService, objectMapper), UsernamePasswordAuthenticationFilter::class.java)

1 Ответ

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

@ Добавить пользовательский класс фильтра путем реализации интерфейса фильтра.Переопределите метод do filter для изменения вашего ответа.

Определите аннотацию bean @Component и аннотацию @Order, чтобы отметить порядок выполнения фильтра, если вы используете более одного фильтра.

@Component
@Order(1)
public class CustomFilter implements Filter {

  @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response, 
      FilterChain chain) throws IOException, ServletException {

  HttpServletRequest req = (HttpServletRequest) request;
  HttpServletResponse res = (HttpServletResponse) response;
  chain.doFilter(request, response);
        // Modify your response  
        res.getContentType();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...