Ошибка 400 неверный запрос, когда я получаюInInStStream в HandlerInterceptorAdapter - PullRequest
0 голосов
/ 06 декабря 2018

Я хочу получить JSON тела записи в Запросе, и для этого я использовал HttpServletRequestWrapper, направляя меня по комментариям здесь.

Проблема при использовании этого сервера tomcat возвращает ошибку 400 Bad Request,но ничего не появляется в журнале, и я не знаю, почему это не работает.

Это мой код.

Мой псевдоним RequestWrapper RequestWrapperAccess

public class RequestWrapperAccess extends HttpServletRequestWrapper {

    private final String body;

    public RequestWrapperAccess(HttpServletRequest request) throws IOException {
        super(request);
        StringBuilder stringBuilder = new StringBuilder();
        BufferedReader bufferedReader = null;
        try {
            InputStream inputStream = request.getInputStream();
            if (inputStream != null) {
                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                char[] charBuffer = new char[128];
                int bytesRead = -1;
                while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                    stringBuilder.append(charBuffer, 0, bytesRead);
                }
            } else {
                stringBuilder.append("");
            }
        } catch (IOException ex) {
            throw ex;
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException ex) {
                    throw ex;
                }
            }
        }
        body = stringBuilder.toString();
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
        ServletInputStream servletInputStream = new ServletInputStream() {
            public int read() throws IOException {
                return byteArrayInputStream.read();
            }
        };
        return servletInputStream;
    }

    @Override
    public BufferedReader getReader() throws IOException {
        return new BufferedReader(new InputStreamReader(this.getInputStream()));
    }

    public String getBody() {
        return this.body;
    }

}

Мой псевдоним InterceptorHandler AuthInterceptorAccess

public class AuthInterceptorAccess extends HandlerInterceptorAdapter {

    @Autowired
    TokenUtils tokenUtils;

    @Autowired
    ObjectMapper mapper;

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {

        super.afterCompletion(request, response, handler, ex);
    }

    @Override
    public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // TODO Auto-generated method stub
        super.afterConcurrentHandlingStarted(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        RequestWrapperAccess wrapper = new RequestWrapperAccess(request);

        UserDomain credenciales = mapper.readValue(wrapper.getBody(), UserDomain.class);

        if (credenciales.getUsername() == null || credenciales.getUsername().isEmpty()
                || credenciales.getPassword() == null || credenciales.getPassword().isEmpty()) {
            response.setStatus(HttpStatus.FORBIDDEN.value());
            response.getWriter().write(mapper
                    .writeValueAsString(new ResponseMessage("Parametros faltantes", HttpStatus.BAD_REQUEST.value())));
            return false;
        }

        return true;
    }

}

Отладка Eclipse, я вижу все в порядке

Debug eclipse

Ответ почтальона

Postman

Tomcat Log

Log Tomcat

...