SpringMvc 数据绑定400错误

今天请求一个SpringMvc 的时候,客户端总是报出:

The
request sent by the client was syntactically incorrect

网上都是说的是bean的名字和表单的名字不一样,但是我检查了N多遍之后,还是有报这个异常,就想到了SpringMvc
自动装配的问题。

然后看日志说是""转为int类型的时候不可以为空;

应该就是数据绑定的问题了,经过一番研究,springMvc的数据绑定有几种方式:

1,controller 独享

2,全局共享

controller独享方式:





1

2

3

4

5

6

7

@InitBinder

public void initBinder(WebDataBinder binder) {

    SimpleDateFormat dateFormat = new
SimpleDateFormat("yyyy-MM-dd");

    dateFormat.setLenient(false);

    binder.registerCustomEditor(Date.class, new
CustomDateEditor(

            dateFormat, false));

}

全局共享:        

全局共享方式有几种实现方法:

①继承
WebBindingInitializer 接口来实现全局注册

使用@InitBinder只能对特定的controller类生效,为注册一个全局的customer
Editor,可以实现接口WebBindingInitializer 。





1

2

3

4

5

6

7

8

9

public class CustomerBinding implements
WebBindingInitializer {

    @Override

    public
void initBinder(WebDataBinder binder, WebRequest request) {

        SimpleDateFormat dateFormat = new
SimpleDateFormat("yyyy-MM-dd");

        dateFormat.setLenient(false);

        binder.registerCustomEditor(Date.class, new
CustomDateEditor(

                dateFormat, false));

    }

xml配置文件:





1

2

3

4

5

6

7

<bean

        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

        <property name="webBindingInitializer">

            <bean

                class="net.zhepu.web.customerBinding.CustomerBinding"
/>

        </property>

    </bean>

使用conversion-service来注册自定义的converter
 

DataBinder实现了PropertyEditorRegistry,
TypeConverter这两个interface,而在spring mvc实际处理时,返回值都是return
binder.convertIfNecessary(见HandlerMethodInvoker中的具体处理逻辑)。因此可以使用customer
conversionService来实现自定义的类型转换。

配置文件:





1

2

3

4

5

6

7

8

9

10

11

<!-- 自定义类型转换 -->

    <bean id="conversionService"

        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

        <property name="converters">

            <list>

                <bean class="com.cms.common.util.DateConverter"
/>

                <bean class="com.cms.common.util.IntegerConverter"
/>

                <bean class="com.cms.common.util.LongConverter"
/>

            </list>

        </property>

    </bean>

实现类:





1

2

3

4

5

6

7

8

9

10

11

12

13

14

public class LongConverter implements
Converter<String,Long>{

    @Override

    public
Long convert(String
text) {

        if
(StringUtil.isEmpty(text))return
0l;

        try
{

            return
Long.parseLong(text);

        } catch
(Exception e) {

            // TODO: handle exception

        }

        return
0l;

    }

}

xml配置converter:





1

2

3

4

5

6

<!-- 解决乱码 -->

    <mvc:annotation-driven conversion-service="conversionService">

        <mvc:message-converters register-defaults="true">

            <bean class="com.cms.common.db.UTF8StringHttpMessageConverter"
/>

        </mvc:message-converters>

    </mvc:annotation-driven>

时间: 2024-11-10 11:50:53

SpringMvc 数据绑定400错误的相关文章

java springMVC 报400错误问题

java springMVC 中如果报400错误 很有可能是因为时间转换的问题. 我在项目中就遇到了这个问题,是因为我少引用了一个库,如果是因为时间问题的话添加以下依赖就可以解决. 1 <dependency> 2 <groupId>joda-time</groupId> 3 <artifactId>joda-time</artifactId> 4 <version>1.3</version> 5 </depende

spring mvc 数据绑定 400错误

情景:使用在方法中绑定数据的时候,打开链接,出现400错误. @RequestMapping(value = "editItemSubmit") public String editItemSubmit(int id, Items item) { itemService.updateItemFromId(id, item); return "redirect:queryItemlList"; } public class Items { private int id

SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法

系统:WIN7 数据库:mysql 开发工具:Eclipse 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 . 在controller使用对象来接收前台页面的date数据类型时报400错误 下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date

SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇日期格式报400错误解决方法

系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date; 2 3 public class User {

SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法

使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date; 2 3 public class User { 4 5 private int userId; 6 private String userName; 7 private Date createDate; 8 9 public

HTTP 400 错误 - 请求无效 (Bad request)

在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装: 2)前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型: 解决方案: 1)对照字段名称,类型保证一致性 2)使用stringify将前端传递的对象转化为字符串    data: JSON.stringify(param)  ;

Yii框架 400 错误

YII  400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用. 所以,如果你自己没有csrf校验机制,严禁关闭csrf. 怎么关呢? public $enableCsrfValidation=false;  设置 为false为成员变量 如果不关.怎么

Yii2请求,报400错误

出现400错误是yii2.0的csrf防范策略导致 在components里面添加request配置如下: 'request' => [ // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation 'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4', 'enableCookieValid

get请求400错误,post请求405错误

get请求400错误,post请求405错误 (2016-08-31 17:19:27) 转载▼     出现错误原因,后台接收参数part使用的是List,参数的属性对不上,传参使用的类型是String,改为post请求之后才发现 此种错误再次发生,确实是后台接受参数类型和前台所传类型不符,导致400错误 附上错误对应 400 - 错误的请求. ·401 - 访问被拒绝.IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因.这些具体的错误代码在浏览器中显示,但不在 IIS 日志中