Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.

使用gitee的WebHooks时测试报错:

{“timestamp”:“2021-12-12T13:21:26.444+0000”,“status”:400,“error”:“Bad Request”,“message”:“Invalid JSON input: Cannot deserialize instance of java.lang.String out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.lang.String out of START_ARRAY token\n at [Source: (PushbackInputStream); line: 1, column: 315] (through reference chain: java.util.LinkedHashMap[“commits”])”,“path”:"/actuator/bus-refresh"}

解决方法:
springboot:添加过滤器

package com.shuang.filters;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;

/**
 * @DATE: 2021/12/12 21:12
 * @Author: 小爽帅到拖网速
 */
@Component
public class UrlFilter  implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpServletRequest = (HttpServletRequest)request;
    HttpServletResponse httpServletResponse = (HttpServletResponse)response;

    String url = new String(httpServletRequest.getRequestURI());

    //只过滤/actuator/bus-refresh请求
    if (!url.endsWith("/bus-refresh")) {
      chain.doFilter(request, response);
      return;
    }

    //获取原始的body
    String body = readAsChars(httpServletRequest);

    System.out.println("original body:   "+ body);

    //使用HttpServletRequest包装原始请求达到修改post请求中body内容的目的
    CustometRequestWrapper requestWrapper = new CustometRequestWrapper(httpServletRequest);

    chain.doFilter(requestWrapper, response);

  }

  @Override
  public void destroy() {

  }

  private class CustometRequestWrapper extends HttpServletRequestWrapper {
    public CustometRequestWrapper(HttpServletRequest request) {
      super(request);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
      byte[] bytes = new byte[0];
      ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);

      return new ServletInputStream() {
        @Override
        public boolean isFinished() {
          return byteArrayInputStream.read() == -1 ? true:false;
        }

        @Override
        public boolean isReady() {
          return false;
        }

        @Override
        public void setReadListener(ReadListener readListener) {

        }

        @Override
        public int read() throws IOException {
          return byteArrayInputStream.read();
        }
      };
    }
  }

  public static String readAsChars(HttpServletRequest request)
  {

    BufferedReader br = null;
    StringBuilder sb = new StringBuilder("");
    try
    {
      br = request.getReader();
      String str;
      while ((str = br.readLine()) != null)
      {
        sb.append(str);
      }
      br.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    finally
    {
      if (null != br)
      {
        try
        {
          br.close();
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
      }
    }
    return sb.toString();
  }
}

启动类添加包扫描

@ServletComponentScan(basePackages = "com.shuang.filters")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值