SpringMvc 参数绑定自定义对象

本文介绍SpringMVC中Form与JSON提交数据的处理方式,详细讲解如何使用WebDataBinder实现自定义对象的数据绑定,适用于希望提高数据处理效率的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springmvc我们经常在写controller一般都接受两种方式,一种是form提交,一种是json提交,下面就来介绍如何在这两种方式中将提交的数据自动绑定到自定义对象中。

json提交

这个比较简单,在网上搜一下一大把,这里就简单放一段代码:

@RequestMapping("/testjson")
public String testjson(@RequestBody User user){
    return "ok";
}

form提交

这个是比较头疼的,一般form有很多的参数,我们可以像下面这样写:

@RequestMapping("/test")
public String testParam(@RequestParam(name = "name") String name, @RequestParam(name = "sex") String sex) {
    return name + sex;
}

但是如果我改成下面这样会怎么样?然后用form提交参数 name=zack & sex=boy

@RequestMapping("/test")
public String test(@RequestParam(name = "user") User user) {
    return user.getName();
}

结果是报错:

{
"timestamp": "2018-05-29T11:58:37.450+0000",
"status": 400,
"error": "Bad Request",
"message": "Required User parameter 'user' is not present",
"path": "/test1"
}

我的参数里确实是没有user这个,其实我的原本目的是想让spring把我传递的name和sex熟悉拼装好生成一个user对象,因为刚好user对象就有这2个属性,spring可没有智能。那该怎么办?

这个时候引入WebDataBinder, 在你的controller里加上下面的代码:

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(User.class, new UserFormatEditor());
}
public static class UserFormatEditor extends PropertiesEditor {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        setValue(JSONObject.parseObject(text, User.class));
    }

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

然后在请求时将参数改为 user = {"name":"zack","sex":"boy"} ,之后就成功的获取User对象,WebDataBinder帮我们告诉了spring,如果遇到了一个字符串参数要被包装成User.class,用我们自定义的UserFormatEditor就行。

总结

作为规范而言,form提交的方式本身就需要我们一个一个属性的接收,而不能用一个对象统一接收,如果你想用一个对象统一接收,请采用json的方式提交。

 

欢迎关注我的个人的博客www.zhijianliu.cn, 虚心求教,有错误还请指正轻拍,谢谢

版权声明:本文出自志健的原创文章,未经博主允许不得转载

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值