SpringMVC Clob字段如何接收

程序员Joe 发布于 2014/10/15 13:48
阅读 2K+
收藏 1

普通的Spring JPA 表单增删改查。

javabean:


private String id;
private Boolean isdelete; 
private String sqmc; 
private Date clsj; 
private String bgdz; 
private Clob bz;
比如我有n个不同类型的字段。


controller层代码:


/**
	 * add、update
	 * 
	 * @param file
	 * @param Pagecjjj
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/Pagecjjj/add",produces = "text/html; charset=utf-8")
	public String add(@ModelAttribute Pagecjjj pagecjjj,HttpServletRequest request) {
		String returnId = pagecjjjService.add(pagecjjj).getId()+"";
		return JsonSimple.toJSONString(Utils.createMsg("success", returnId, true));
	}

我通过这种方法来将页面form值直接通过@ModelAttribuite 从pagecjjj中取

String的参数是没有问题的,其它类型的参数,比如date格式,Integer为空时,都会有点错误

解决方法:

/** 
     * 用于处理各种类型参数处理
     * @return 
     */  
    @InitBinder  
    protected  void initBinder(WebDataBinder binder) {  
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); 
        binder.registerCustomEditor(long.class, new LongEditor());    
        binder.registerCustomEditor(double.class, new DoubleEditor());    
        binder.registerCustomEditor(float.class, new FloatEditor());
        binder.registerCustomEditor(int.class, new IntegerEditor());
    }
里面的Editor是我自己定义的,

比如:

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();  
    }  
}
至此,一般类型的数据在spring mvc都可以正常接收使用。


但是最近做一个项目,某表字段为varchar(MAX),我用的sql server数据库。

页面是一个富文本编辑器,所以我将javabean中类型设置为Clob,但是问题来了

我在controller层接受参数的时候就会报错。我感觉还是得用个Editor来处理一下,可是怎么写呢

一时半会没找到解决办法,在线等大神!!!

错误信息:

org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'pagecjjj' on field 'bz': rejected value []; codes [typeMismatch.pagecjjj.bz,typeMismatch.bz,typeMismatch.java.sql.Clob,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [pagecjjj.bz,bz]; arguments []; default message [bz]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Clob' for property 'bz'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.sql.Clob] for property 'bz': no matching editors or conversion strategy found]
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'pagecjjj' on field 'bz': rejected value []; codes [typeMismatch.pagecjjj.bz,typeMismatch.bz,typeMismatch.java.sql.Clob,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [pagecjjj.bz,bz]; arguments []; default message [bz]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Clob' for property 'bz'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.sql.Clob] for property 'bz': no matching editors or conversion strategy found]
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:112)



加载中
0
熊大信了熊二的话
熊大信了熊二的话

@Lob

private string bz;

这样就可以了

程序员Joe
程序员Joe
非常感谢!完美解决
0
魔力猫
魔力猫
表现层和持久层,八竿子打不着。
魔力猫
魔力猫
回复 @程序员V : LOB这种东西不应该出持久层的。
程序员Joe
程序员Joe
问题不就出在持久层接收view层的参数吗
返回顶部
顶部