簡體   English   中英

我在springboot中使用Interceptor,但是在這里我得到了錯誤

[英]I am using the Interceptor in springboot , but there I am getting the error as

我必須在springboot中使用攔截器在請求得到處理之前和之后進行一些處理。 但是在使用它時,我遇到了一個錯誤:到目前為止,我只是試圖使用pre-handle方法,而現在我正面臨這個問題。

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing"
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)

我以為Json轉換可能會出現問題,所以我嘗試了其他解決方案,例如Jackson庫,那里也遇到了同樣的問題。

在這里,我必須將HttpServletRequest轉換為jsonObject,但是我遇到了上述錯誤。 當我刪除下面的BufferedReader到jsonObject轉換的邏輯,並從prehandle方法返回true時,它可以正常工作。

碼:

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

        StringBuffer jb = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null)
                jb.append(line);

            JSONObject obj = new JSONObject(jb.toString());
            System.out.println(obj);
        } catch (Exception e) {
        }

        return super.preHandle(request, response, handler);
    }

測試郵遞員的上述通話時,我得到400。

當您從HttpServletRequest讀取主體時,主體將被消耗,因此當它到達controller (您可能已提到@RequestBody ,將不會接收任何數據。 這就是為什么您收到Status Code : 400 Required request body is missing

簡單來說,請求中的主體只能讀取一次。

但是,如果您想在業務邏輯之前進行處理,則必須將其緩存在攔截器中以使用它(可能正在使用ThreadLocal)或查看RequestBodyAdviceAdapter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM