SpringMVC表单提交参数400错误解决方案

 更新时间:2020年10月21日 11:09:01   作者:cuisuqiang  
这篇文章主要介绍了SpringMVC表单提交参数400错误解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

SpringMVC下,提交表单报400错:

description The request sent by the client was syntactically incorrect.

根据网上的总结,可能是因为如下几个问题引起的

1.参数指定问题

如果Controller中定义了参数,而表单内却没有定义该字段

@SuppressWarnings("deprecation") 
@RequestMapping("/hello.do") 
public String hello(HttpServletRequest request,HttpServletResponse response, 
    @RequestParam(value="userName") String user 
){ 
  request.setAttribute("user", user); 
  return "hello"; 
} 

这里,表单内必须提供一个userName的属性!

不想指定的话,你也可以定义这个属性的默认值defaultValue="":

@SuppressWarnings("deprecation") 
@RequestMapping("/hello.do") 
public String hello(HttpServletRequest request,HttpServletResponse response, 
    @RequestParam(value="userName",defaultValue="佚名") String user 
){ 
  request.setAttribute("user", user); 
  return "hello"; 
} 

也可以指定该参数是非必须的required=false:

@SuppressWarnings("deprecation") 
@RequestMapping("/hello.do") 
public String hello(HttpServletRequest request,HttpServletResponse response, 
    @RequestParam(value="userName",required=false) String user 
){ 
  request.setAttribute("user", user); 
  return "hello"; 
} 

2.上传问题

上传文件大小超出了Spring上传的限制

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  <!-- 设置上传文件的最大尺寸1024字节=1K,这里是10K -->  
  <property name="maxUploadSize">  
    <value>10240</value>  
  </property> 
  <property name="defaultEncoding">  
      <value>UTF-8</value>  
  </property>  
</bean> 

我们工程里面是这个问题引起的,但是我实际示例中发现超过大小是直接报错的。

3.时间转换问题

也有网友说是因为时间转换引起的,而我实际操作中发现报错是:

The server encountered an internal error that prevented it from fulfilling this request

这里也顺便提一下,假如你的Controller要一个时间对象,代码如下:

@SuppressWarnings("deprecation") 
@RequestMapping("/hello.do") 
public String hello(HttpServletRequest request,HttpServletResponse response, 
    @RequestParam(value="userName",defaultValue="佚名") String user, 
    Date dateTest 
){ 
  request.setAttribute("user", user); 
  System.out.println(dateTest.toLocaleString()); 
  return "hello"; 
} 

而网页上实际给的是

<input type="text" name="dateTest" value="2015-06-07">

这里需要在Controller增加一个转换器

@InitBinder 
public void initBinder(WebDataBinder binder) { 
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
  dateFormat.setLenient(false); 
  binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot学习入门之表单验证

    Spring Boot学习入门之表单验证

    表单验证主要是用来防范小白搞乱网站和一些低级的黑客技术。Spring Boot可以使用注解 @Valid 进行表单验证。下面这篇文章主要给大家介绍了关于Spring Boot学习入门之表单验证的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • SpringBoot中使用多线程的方法示例

    SpringBoot中使用多线程的方法示例

    这篇文章主要介绍了SpringBoot中使用多线程的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java使用线程池实现socket编程的方法详解

    Java使用线程池实现socket编程的方法详解

    这篇文章主要为大家详细介绍了Java使用线程池实现socket编程的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 详解SpringBoot的jar为什么可以直接运行

    详解SpringBoot的jar为什么可以直接运行

    SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行的jar包,本文给大家介绍了为什么SpringBoot的jar可以直接运行,文中有相关的代码示例供大家参考,感兴趣的朋友可以参考下
    2024-02-02
  • MyBatis Plus整合Redis实现分布式二级缓存的问题

    MyBatis Plus整合Redis实现分布式二级缓存的问题

    Mybatis内置的二级缓存在分布式环境下存在分布式问题,无法使用,但是我们可以整合Redis来实现分布式的二级缓存,这篇文章给大家介绍MyBatis Plus整合Redis实现分布式二级缓存,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • 深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)

    通常来讲,重构是指不改变功能的情况下优化代码,但本文所说的重构也包括了添加功能。这篇文章主要介绍了重构Mybatis与Spring集成的SqlSessionFactoryBean(上)的相关资料,需要的朋友可以参考下
    2016-11-11
  • 基于springboot实现一个简单的aop实例

    基于springboot实现一个简单的aop实例

    这篇文章主要介绍了基于springboot实现一个简单的aop,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • 浅析Java中clone()方法浅克隆与深度克隆

    浅析Java中clone()方法浅克隆与深度克隆

    Java克隆(Clone)是Java语言的特性之一,本篇文章主要介绍了Java中的Clone机制是如何工作的,需要的朋友可以参考下
    2017-04-04
  • 一文详细讲解Java时间格式转换

    一文详细讲解Java时间格式转换

    这篇文章主要介绍了Java时间格式转换的相关资料,文中详细介绍了SimpleDateFormat(适用于Java8之前)和java.time(适用于Java8及之后)的用法,需要的朋友可以参考下
    2024-12-12
  • Java socket通信模拟QQ实现多人聊天室

    Java socket通信模拟QQ实现多人聊天室

    Socket在Java实战网络通信编程应用中有非常重要的作用,你想要跟别人联系都得通过socket占据端口来实现,掌握Socket技术不仅在聊天应用程序中需要用到(比如QQ什么的都都是用socket来写的),而且对于学习 Asp.net 也非常有帮助
    2022-07-07

最新评论