springmvc 接受特殊类型字段的处理方法

springmvc接受前台传入的数据时如果该字段类型无法被封装(如Date),则会出现400 Bad Request错误,解决方法如下。

1.在需要处理的字段前加上注解:

@DateTimeFormat( pattern = "yyyy-MM-dd" )

然后在项目中引入joda-time.jar包,最后在在 SpringMVC 配置 xml 文件中中加入配置: <mvc:annotation-driven /> 。这一句配置是一种简写,其实是给 spring 容 器中注入了两个 Bena ,分别是: DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 。 @DateTimeFormat 注解的内部同样需要使用到前面注入的两 个 bean 去处理,所以缺少这个配置, Spring 容器中没有对应的 bean 去处理注解同样也会报错。至此,所有的步骤都完成了,可以跑了。、

2.使用springmvc提供的@InitBinder标签:

在控制层中加入一个编辑器

    /**
     * 设置控制层特殊字段转换规则(如 Date),可重载
     * @param binder
     */
    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

spring提供了大量的实现类,诸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等

    @InitBinder
       protected void initBinder(WebDataBinder binder) {
           binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
    /        binder.registerCustomEditor(int.class, new CustomNumberEditor(int.class, true));
           binder.registerCustomEditor(int.class, new IntegerEditor());
    /        binder.registerCustomEditor(long.class, new CustomNumberEditor(long.class, true));
           binder.registerCustomEditor(long.class, new LongEditor());
           binder.registerCustomEditor(double.class, new DoubleEditor());
           binder.registerCustomEditor(float.class, new FloatEditor());
       }   

也可以不使用自带这些编辑器类,通过继承PropertiesEditor实现自定义编辑类

import org.springframework.beans.propertyeditors.PropertiesEditor;

public class DoubleEditor extends PropertiesEditor {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text == null || text.equals("")) {
            text = "0";
        }
        setValue(Double.parseDouble(text));
    }  

    @Override
    public String getAsText() {
        return getValue().toString();
    }
} 
import org.springframework.beans.propertyeditors.PropertiesEditor;

public class IntegerEditor extends PropertiesEditor {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text == null || text.equals("")) {
            text = "0";
        }
        setValue(Integer.parseInt(text));
    }  

    @Override
    public String getAsText() {
        return getValue().toString();
    }
} 
import org.springframework.beans.propertyeditors.PropertiesEditor;

public class FloatEditor extends PropertiesEditor {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text == null || text.equals("")) {
            text = "0";
        }
        setValue(Float.parseFloat(text));
    }  

    @Override
    public String getAsText() {
        return getValue().toString();
    }
}  
import org.springframework.beans.propertyeditors.PropertiesEditor;

public class LongEditor extends PropertiesEditor {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text == null || text.equals("")) {
            text = "0";
        }
        setValue(Long.parseLong(text));
    }  

    @Override
    public String getAsText() {
        return getValue().toString();
    }
}  

3:配置全局日期转换器。

http://blog.csdn.net/chenleixing/article/details/45156617

时间: 2024-11-09 07:36:39

springmvc 接受特殊类型字段的处理方法的相关文章

springMVC接受json类型数据

springMVC接受json格式的数据很简单 使用@RequestBody 注解,标识从请求的body中取值 服务端示例代码 @RequestMapping(value = "/t4", method = RequestMethod.POST) @ResponseBody public Result t3(@RequestBody SysUser user) { Result r = Result.success(); r.setData(user); return r; } 客户端

使用AFNetworking框架时,出现不可接受内容类型错误的解决方法

在使用AFNetworking 3.0时出现了这个问题: Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/plain" 以下为代码展示 1 Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request fa

Java 存储和读取 oracle CLOB 类型字段的实用方法

package oracle.clob; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java

SpringMVC处理Date类型的成员变量方法

原文链接:http://www.tuicool.com/articles/aYfaqa 在使用 SpringMVC 的时候,我们可能需要将一个对象从 View 传递给 Controller .而当这个 Object 只是一些简单的 String , int 或者 boolean 类型的成员变量时,SpringMVC 能自动将 View 层的 JSON 包含的 String 类型转换为 Object 成员变量相应的类型.但是当这个 Object 包 Date 类型的成员变量的时候, SpringM

SQL Server中TEXT类型字段值在数据库中追加字符串方法

在数据上我们往往会遇到ntext大文本类型,这种类型如果和 nvarchar类型相加会出现问题,所以有一中方法可以解决这种问题. 使用的sql   函数: TEXTPTR:返回要更新的 text.ntext 或 image 数据的文本指针的值. UPDATETEXT :在适当的位置更改 text.ntext 或 image 列的一部分 WRITETEXT: 来更新和替换整个 text.ntext 或 image 字段 举例: CREATE TABLE [dbo].[aa]( [ID] [int]

C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法

原文:C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法 本人新手,在.Net中写WebAPI的时候,当接口返回的json数据含有日期时间类型的字段时,总是在日期和时间中夹着一个字母T:微软这么设置可能有其内在的初衷,但是对于我来说,这样的格式不是很方便,前端同学展示出来的时候也总是要记得处理一下显示格式.曾经问过部门内一位老鸟,老鸟的反应告诉我这在微软的框架下做json转换是不可避免的:当初一度放弃了这个问题.后来突然冷静分析了一下,微软不可能做

Mysql text类型字段存储提示错误信息 String data,right truncated:1406 Data too long for column &#39;content&#39; at row 1

String data,right truncated:1406 Data too long for column 'content' at row 1 当Mysql提示如下时: 1.首先查看存入的文本内容的大小,根据内容大小设置类型 如果超出,根据大小进行更换类型 2.如果还是超出那可能是Mysql根据配置文件限制Server接受数据包大小,有时候大的插入和更新会受max_allowed_packet参数限制,导致写入或者更新失败. 查看目前配置: 代码如下: 以上说明目前的配置是:60 M

SpringMVC 处理Date类型数据@InitBinder @DateTimeFormat 注解 的使用

使用SpringMVC的时候,需要将表单中的日期字符串转换成对应JavaBean的Date类型,而SpringMVC默认不支持这个格式的转换,解决方法有两种,如下: 方法一 . 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作. /* 以下资料来自网络 */ 用@InitBinder注解的控制器方法,允许你直接在你的控制器类中配置 Web 数据绑定.@InitBinder标记初始化WebDataBind

报表控件Stimulsoft Reports数据字段的使用方法

数据字段在报表中有着重要的作用.Stimusoft Reports报表中数据字段的使用简明易懂,在报表工具中也有着显著优势. 数据源的值可用于表达式中.若要从数据源中引用一个字段,你必须提供一个该字段的字符串表示形式.引用的语法很简单——在大括号中给出数据源名称,并且字段名用小数点或句号分隔,如下所示: {DataSource.Column} 举个例子,如果在字段名为“The Big Company”下有一个客户表条目,你需要输入以下表达式: Company Name: {Customers.C