springmvc ajax form表单提交出现400报错

springmvc ajax form表单提交出现400报错ajax提交form表单报400的原因总结

大家好,又见面了,我是你们的朋友全栈君。

此为转载:确实很不错,最下有原文的传送门



springmvc form表单提交报400错误,出现400错误的原因及解决方法:

原因:

在SpringMVC中的Action中处理前台ajax请求传过来的json数据直接转成对应的实体类时出错:400 Bad Request,后台也不报错,400指的的是请求无效(请求有语法问题或者不能满足请求)。

1:一般最常见的就是后台的实体类bean与前台穿过的类型不匹配如你的javabean中有定义了Date类型和int类型的成员变量导致转化器在把json数据转化成bean时不能转化

2:log4j的配置文件里错误将部分log打为Info级别所致

3:要返回json的却忘了加@ResponseBody

4:ajax请求的连接后边忘了加参数,如url:basePath + “kscj/unbill.do?jqid=”+jqids

5:传了非实体bean属性的参数过来。

6:controller指定的参数名称与前台不一致,如:使用了@RequestParam(value=”userName”)而前台必须指定该名称

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1. @RequestMapping(“/hello.do”)    
  2. public String hello(HttpServletRequest req,HttpServletResponse resp,@RequestParam(value=“userName”)String user ){    
  3.     request.setAttribute(“user”, user);    
  4.     return “hello”;    
  5. }   

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

[java] 
view plain  
copy

 
在CODE上查看代码片
派生到我的代码片

  1. @RequestMapping(“/hello.do”)    
  2. public String hello(HttpServletRequest req,HttpServletResponse resp,@RequestParam(value=“userName”,required=false)String user){    
  3.    request.setAttribute(“user”, user);    
  4.    return “hello”;    
  5. }   

解决方法:

1:把实体类的javabean里边的类型都改成string类型,在配置SQL语句时用数据库函数to_date或者to_number转化的,如果再Java中用到这个字符串类型的日期的话,有必要的话,就用For format=new SimpleDateFormat(“yyyy-MM-dd”),format.parse()来转换。

2:在对应的实体类的对应的非字符串类型的变量的setter方法中传入string类型的,然后在里边用SimpleDateFormat或者Integer进行转化。

如:public void setBjsj(Date bjsj) {

        this.bjsj = bjsj;
    }    
变成

public void setBjsj(String bjsj) throws ParseException {

        SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
         this.bjsj =sdf.parse(bjsj) ;

}

备注:

3:在实体类的日期属性上加@DateTimeFormat(pattern=”yyyy-MM-dd”)注解。

spring提供了FormattingConversionService和DefaultFormattingConversionService来完成对象的解析和格式化。

首先引入格式化jar:把Joda-Time包添加到之前的项目中,这里用的是joda-time-2.3.jar,然后在实体类中这样写:

@NumberFormat(style=Style.CURRENCY)

private double money;

@DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”

 private Date date; 

注意:这里的money和date不再是String类型,而是它们自己本来的类型。




转载出处:http://blog.csdn.net/u014079773/article/details/51865178  (总结的很好,确实能解决问题!!!)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133477.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 动静分离_如何做前后端动静分离

    Java 动静分离_如何做前后端动静分离我们的ERP系统就是前后端完全分离,毫无关联。后端用的是改造的Laravel框架,将业务拆分、路由拆分,来分离后端复杂的权限验证,同时对外依旧是简单明确的RESTfulAPI。前端采用Vue.js+Bootstrap构建。补充说明题主在问这个问题之前,有必要对HTTP协议有一定的了解,这样你就不会在一些细枝末节无限纠结。因为本质上前后端的区别就在于一个是请求方、一个是响应…

    2022年6月1日
    36
  • linux修改sftp端口的方法:2个地方需要修改「建议收藏」

    linux修改sftp端口的方法:2个地方需要修改「建议收藏」SSH配置文件有两个都放在/etc/ssh/ssh_config和/etc/ssh/sshd_config在ssh_config中,找到#port22,在其下面就加入port8080同时,在sshd_config中,找到#port22,在其下面就加入port8080(与上面相同)之后重启sshservicesshdrestart…

    2025年11月17日
    5
  • dtu连接mysql_Azure SQL 数据库中的DTU和eDTU是什么

    dtu连接mysql_Azure SQL 数据库中的DTU和eDTU是什么AzureSQL数据库中的DTU和eDTU是什么03/07/20177分钟可看完本文内容MaxShen沈云技术解决方案专家AzureSQL使用了数据库事务单位(DTU)和弹性数据库事务单位(eDTU)来作为一个计量单位。但是DTU和eDTU究竟是什么?在官方文档中是这样解释的:DTU是一个资源度量单位,表示保证可用于单一数据库服务层内特定性能级别的单个AzureSQL…

    2025年6月13日
    3
  • apache24+php8配置

    apache24+php8配置电脑下载安装地址:Xampp安装完成后找到里面的apache》config》httpd.config:首先注释掉默认的路径DocumentRoot”D:/software/Xampp/htdocs”;然后再找到IfModuledir_module在后面追加:<IfModuledir_module>DirectoryIndexindex.phpindex.htmlindex.htmdefault.phpdefault.htmldefault.htmhome.

    2022年7月12日
    18
  • zabbix5.0安装及配置

    zabbix5.0安装及配置

    2021年5月29日
    147
  • 分析开源项目[通俗易懂]

    分析开源项目[通俗易懂]手把手教你分析开源项目不知道代码怎么来的?代码跑不起来?项目对自己有帮助,不会模块化分析?任何一个开源项目,都可以让自己得到提升!这里以EL-ADMIN为例https://el-admin.vip/1、观察开源项目后端代码:前端代码:2、开源项目下载可使用zip下载,或者Git观察:用了哪些技术(springboot,vue,redis,)是否有数据库(mysql)你的环境是否匹配(Java,Maven,npm,nodejs,)通过了,然后再想办法运行3、跑

    2022年6月11日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号