【问题标题】:HttpMessageNotReadableException: Could not read JSON: Unrecognized field using Spring boot and AndroidHttpMessageNotReadableException:无法读取 JSON:使用 Spring Boot 和 Android 无法识别的字段
【发布时间】:2020-11-29 23:43:04
【问题描述】:

我正在开发与我的服务器通信的 Web 应用程序。这种通信是通过 Spring 框架和 react js 完成的。我正在向我的服务器发送读取 json 的请求,但出现此错误

错误反应控制台:

未捕获(承诺中)错误:请求失败,状态码为 400

错误弹簧启动:

2020-08-10 11:54:34.550 警告 22020 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver :已解决 [org.springframework.http.converter.HttpMessageNotReadableException: 读取输入消息时出现 I/O 错误;嵌套异常是 java.io.IOException: 流关闭]

图像 json :

代码反应 js:

 constructor(props) {
    super(props);
    this.state = {
      rfp: false,
      rfx: false,
      rfp_x: false,
      allclassification: false,
  
       eu : false,
      americas: false,
      aae: false,
      ger: false,
      eu2: false,
      latam : false,
      empty: false,
      allregion: false,
    }
    
    this.onChange = this.onChange.bind(this);
    this.onSubmit = this.onSubmit.bind(this);
  }

  onChange(e) {
    this.setState({ [e.target.name]: e.target.checked });
  }

  onSubmit(e) {
    e.preventDefault();
    const FilterClassification = {
      // classification
      rfx: this.state.rfx,
      rfp: this.state.rfp,
      rfp_x: this.state.rfp_x,
      allclassification: this.state.allclassification
    };
    const FilterRegion = {
      //Region
     eu : this.state.eu,
    americas  : this.state.americas,
    aae : this.state.aae,
    ger: this.state.ger,
    eu2 : this.state.eu2,
    latam : this.state.latam,
    empty : this.state.empty,
    allregion : this.state.allregion,
    }





console.log(FilterClassification);
    console.log(FilterRegion);
    axios.post("http://localhost:8080/MenuFiltre/filtreregioncloser",FilterClassification , FilterRegion )
  }

代码java spring boot:

    @PostMapping("/filtreregioncloser")
    public Iterable<Closerfprfx>gettab1(@RequestBody  FilterClassification FilterClassification  , @RequestBody  FilterRegion FilterRegion) 
    {
    boolean rfx = FilterClassification.isRfx();
            String ChaineRfx = "";
            if(rfx==true)
            {
                ChaineRfx="rfx";
            }else
            {
                ChaineRfx="xxxx";
            }
            boolean rfp =FilterClassification.isRfp() ;
            String ChaineRfp = "";
            if(rfp == true)
            {
                ChaineRfp="rfp";
            }else
            {
                ChaineRfp="xxxx";
            }
            boolean rfp_x= FilterClassification.isRfp_x();
            String ChaineRfp_x = "";
            if(rfp_x==true)
            {
                ChaineRfp_x="rfp_x";
            }else
            {
                ChaineRfp_x="xxxx";
            }
            boolean allclassification = FilterClassification.isAllclassification() ;
            
            
               boolean eu = FilterRegion.isEu();
               String ChaineEu= "";
               if(eu==true)
               {
                   ChaineEu="eu";
               }else
               {
                   ChaineEu="xxxx";
               }
               boolean  americas = FilterRegion.isAmericas();
               String ChaineAmericas = "";
               if(americas==true)
               {
                   ChaineAmericas="americas";
               }
               else {
                   ChaineAmericas="xxxx";
               }
               boolean  aae = FilterRegion.isAae();
               String ChaineAae = "";
               if(aae==true)
               {
                   ChaineAae="aae";
               }else {
                   ChaineAae="xxxx";
               }
               boolean  ger = FilterRegion.isGer();
               String ChaineGer="";
               if(ger==true)
               {
                   ChaineGer="ger";
                   
               }else
               {
                   ChaineGer="xxxx";
               }
               boolean  eu2 = FilterRegion.isEu2();
               String ChaineEu2="";
               if(eu2=true)
               {
                   ChaineEu2="eu2";
               }else {
                   ChaineEu2="xxxx";
               }
               boolean  latam = FilterRegion.isLatam() ;
               String ChaineLatam = "";
               if(latam=true)
               {
                   ChaineLatam="latam";
                   }else {
                   ChaineLatam="xxxx";
               }
               boolean  empty = FilterRegion.isEmpty();
               String ChaineEmpty="";
               if(empty=true)
               {
                   ChaineEmpty="empty";
               }else {
                   ChaineEmpty="xxxx";
               }
                boolean  allregion = FilterRegion.isAllregion();
}



 

【问题讨论】:

    标签: java json reactjs spring spring-boot


    【解决方案1】:

    如上所述 - 您不能拥有 2 个或更多 @RequestBody。我建议创建一个包装器类,该类将保存您的这 2 个类中的这些参数。还要从你的控制器层摆脱这种“逻辑”......并摆脱这些如果......考虑使用来自 vavr 库的模式匹配,因为那里的策略模式似乎有点矫枉过正

    【讨论】:

      【解决方案2】:

      @RequestBody 注解的参数预计会持有整个正文 请求并绑定到一个对象

      我认为你的参数中不能有多个 RequestBody

      【讨论】:

        猜你喜欢
        • 2013-03-11
        • 2015-08-28
        • 1970-01-01
        • 2019-10-07
        • 2017-05-24
        • 2021-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多