SpringMVC运行项目出现The request sent by the client was syntactically incorrect.问题解决思路?

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
注册配置 MSE Nacos/ZooKeeper,118元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 使用SpringMVC报HTTP Status 400 -The request sent by the client was syntactically incorrect.的错误怎么解决,你不妨看一下我的这个解决思路,再决定,往往你最忽略的地方就是你最容易报错的地方,所以我建议你看一看我的这个思路是否与你的问题一样

 一般出现The request sent by the client was syntactically incorrect.会出现的问题有哪些

在SpringMVC中,当你向服务器发送一个HTTP请求时,如果请求的数据在服务器端无法被正确解析,就有可能会导致"Error 400: The request sent by the client was syntactically incorrect."错误的出现。

这个错误通常发生在以下几种情况下:

    1. 请求参数与服务器端的预期参数不匹配:如果请求中的参数与服务器端的预期参数不匹配,比如参数类型不正确或者参数缺失等,就会导致服务器无法正确解析请求,从而触发错误。
    2. 请求体格式不正确:如果请求体的格式与服务器端的预期格式不一致,比如发送的数据不满足服务器端定义的JSON、XML或者表单格式要求,就会导致服务器无法正确解析请求。
    3. 使用了不合法的字符:如果请求中包含不支持的特殊字符或者非法字符,服务器就无法正确处理请求。
    4. 服务器配置问题:有时候,服务器的配置可能存在问题,比如请求大小限制等,这也可能导致该错误的出现。

    为了解决这个问题,你可以按照以下几个步骤进行排查:

      1. 检查请求参数是否与服务器端的预期参数一致,包括参数的名称、类型和数量等。
      2. 检查请求体的格式是否正确,比如符合JSON、XML或者表单格式的要求。
      3. 检查请求中是否包含合法的字符,避免使用不支持的特殊字符或非法字符。
      4. 检查服务器的配置是否存在问题,比如请求大小限制是否设置合理等。

      如果以上排查方法无法解决问题,你可以查看服务器端的具体错误日志,以获取更详细的错误信息,从而帮助你快速定位和解决问题。

      可以看看我的这个问题

      利用SpringMVC的时候运行自己的项目,报了

      HTTP Status 400 -

      The request sent by the client was syntactically incorrect.

      的错误

      image.gif编辑

      这个时候会有很多人回去找自己的报错,找了很多资料,往往找了很多的资料还是没有解决自己的问题;

      我也找了很多的问题,找了很多的方法,于是我忽略了一个很简单的一个问题,我在这里做一个分享!!!

      后端方法

      我这里以一个文件上传为例,当然方法不一样但是道理还是一样的

      @RequestMapping(value = "/upload")
          public String upload(StrutsClas strutsClas, MultipartFile pic) {
              try {
      //            本地保存地址
                  String dir = PropertiesUtil.getValue("dir");
      //            网络保存地址
                  String server = PropertiesUtil.getValue("server");
      //            文件名
                  String filename = pic.getOriginalFilename();
                  FileUtils.copyInputStreamToFile(pic.getInputStream(), new File(dir + filename));
                  //2) 更新数据库表文件记录
                  strutsClas.setPic(server + filename);
                  strutsClasBiz.updateByPrimaryKeySelective(strutsClas);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return "redirect:list";
          }

      image.gif

      前端代码

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>图片上传</title>
      </head>
      <body>
      <form action="${pageContext.request.contextPath }/sc/upload" method="post" enctype="multipart/form-data">
          <label>班级编号:</label><input type="text" name="cid" readonly="readonly" value="${param.cid}"/><br/>
          <label>班级图片:</label><input type="file" name="pic"/><br/>
          <input type="submit" value="上传图片"/>
      </form>
      </body>
      </html>

      image.gif

      说明

             可以看到我的方法里MultipartFile的名字是pic,我的前端代码form表单里面<input>标签里面的属性name写的也是pic当然这个肯定是没有问题的,但是问题就出在这里,大家肯定会以为这个应该不影响,其实也地球不影响

      问题的说明

             可以看到我的方法里面传递了一个实体类,其实这个实体类属性和我的数据库表列名一一对应的。

      实体类

      package com.tgq.model;
      import lombok.ToString;
      @ToString
      public class StrutsClas {
          private Integer cid;
          private String cname;
          private String cteacher;
          private String pic;
          public StrutsClas(Integer cid, String cname, String cteacher, String pic) {
              this.cid = cid;
              this.cname = cname;
              this.cteacher = cteacher;
              this.pic = pic;
          }
          public StrutsClas() {
              super();
          }
          public Integer getCid() {
              return cid;
          }
          public void setCid(Integer cid) {
              this.cid = cid;
          }
          public String getCname() {
              return cname;
          }
          public void setCname(String cname) {
              this.cname = cname;
          }
          public String getCteacher() {
              return cteacher;
          }
          public void setCteacher(String cteacher) {
              this.cteacher = cteacher;
          }
          public String getPic() {
              return pic;
          }
          public void setPic(String pic) {
              this.pic = pic;
          }
      }

      image.gif

      image.gif编辑

      有些人会认为我这个添加一个路径的方法应该没什么问题,但是问题就出现在这个明显的地方

      问题解决

      因为方法的方法里MultipartFile的名字是pic,我的前端代码form表单里面<input>标签里面的属性name写的也是pic,我们只需要更改这个pic就行了。

             因为这个里MultipartFile的名字和前端代码form表单里面<input>标签里面的属性name写的名字必须是一样的,因为我们传递了实体类,所以我们的这个名字就不能和实体类的属性名或者我们的数据库的列名一致,否则就会出现这样的问题。

      更改后的代码

      方法

      @RequestMapping(value = "/upload")
          public String upload(StrutsClas strutsClas, MultipartFile zx) {
              try {
      //            本地保存地址
                  String dir = PropertiesUtil.getValue("dir");
      //            网络保存地址/upload/
                  String server = PropertiesUtil.getValue("server");
      //            文件名
                  String filename = zx.getOriginalFilename();
                  FileUtils.copyInputStreamToFile(zx.getInputStream(), new File(dir + filename));
                  //2) 更新数据库表文件记录
                  strutsClas.setPic(server + filename);
                  strutsClasBiz.updateByPrimaryKeySelective(strutsClas);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return "redirect:list";
          }

      image.gif

      前端代码

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>图片上传</title>
      </head>
      <body>
      <form action="${pageContext.request.contextPath }/sc/upload" method="post" enctype="multipart/form-data">
          <label>班级编号:</label><input type="text" name="cid" readonly="readonly" value="${param.cid}"/><br/>
          <label>班级图片:</label><input type="file" name="zx"/><br/>
          <input type="submit" value="上传图片"/>
      </form>
      </body>
      </html>

      image.gif

      测试结果

      image.gif编辑


      相关文章
      |
      Java 数据库连接 数据库
      SpringMVC之增删改查(CRUD)项目模拟
      SpringMVC之增删改查(CRUD)项目模拟
      102 0
      |
      2月前
      |
      设计模式 前端开发 Java
      Spring MVC——项目创建和建立请求连接
      MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
      46 1
      Spring MVC——项目创建和建立请求连接
      |
      2月前
      |
      前端开发 Java 应用服务中间件
      【Spring】Spring MVC的项目准备和连接建立
      【Spring】Spring MVC的项目准备和连接建立
      64 2
      |
      4月前
      |
      前端开发 Java 测试技术
      单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
      单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
      |
      6月前
      |
      Java 程序员
      浅浅纪念花一个月完成Springboot+Mybatis+Springmvc+Vue2+elementUI的前后端交互入门项目
      浅浅纪念花一个月完成Springboot+Mybatis+Springmvc+Vue2+elementUI的前后端交互入门项目
      54 1
      |
      7月前
      |
      JSON 前端开发 Java
      SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
      SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
      50 2
      |
      7月前
      SpringMVC跳转外部项目方式
      SpringMVC跳转外部项目方式
      52 0
      |
      7月前
      |
      前端开发 Java Maven
      SpringMVC之初识SpringMVC和项目创建
      【1月更文挑战第18天】 一、SpringMVC简介 1、什么是MVC 2、什么是SpringMVC 3、SpringMVC的特点 二、SpringMVC项目创建步骤 1、创建maven工程 a>添加web模块 b>打包方式:war c>引入依赖 2、配置web.xml a>默认配置方式 b>扩展配置方式 3、创建请求控制器 4、创建springMVC的配置文件 5、测试HelloWorld a>实现对首页的访问 b>通过超链接跳转到指定页面
      124 0
      |
      7月前
      |
      XML Java 应用服务中间件
      SpringMVC与Servlet3.0整合 - ServletContainerInitializer注解配置项目
      SpringMVC与Servlet3.0整合 - ServletContainerInitializer注解配置项目
      65 1
      |
      Java 应用服务中间件 开发工具
      搭建spring+springmvc项目
      搭建spring+springmvc项目
      52 0