Spring MVC数据绑定入门总结

1.基本类型

基本类型参数不可为空 正例:http://localhost:8080/demo/he?id=2 反例:http://localhost:8080/demo/he?id=(报400错误) 注意:String不是基本类型,具体参考>Java数据类型

@RestController //定义控制器返回字符串
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String printHello(int id) {
        return "Response:"+id;
    }

    //添加@RequestParam(required=false)参数可为空
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String printHello(@RequestParam(required=false)int id) {
        return "Response:"+id;
    }

}

2.包装类和数组的处理

@RestController 
public class HelloController {

    // http://localhost:8080/demo/hello?id=1
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String printHello(Integer id) {
        return "Response:"+id;
    }

    // http://localhost:8080/demo/hi?name=Tom&name=Jim
    @RequestMapping(value = "/hi", method = RequestMethod.GET)
    public String printHello(String[] name) {
        return "Response:"+anme;
    }

}

3.简单对象&多层级对象&同属性对象

    //简单对象
    //http://127.0.0.1:8080/Spring/hi?age=10&name=Tom
    @RequestMapping(value="/hi", method = RequestMethod.GET)    
    @ResponseBody
    public String object(Student student){
        return student.toString();
    }

    //多层级对象
    //http://127.0.0.1:8080/Spring/hi2?age=10
    //&name=Tom&student.age=18
    @RequestMapping(value="/hi2", method = RequestMethod.GET)   
    @ResponseBody
    public String object2(Admin admin){
        return admin.toString();
    }

    //同属性的多对象
    //http://127.0.0.1:8080/Spring/hi3?
    //name=Tom&student.age=18
    @RequestMapping(value="/hi3", method = RequestMethod.GET)   
    @ResponseBody
    public String object3(Student student, Admin admin){
        return student.toString()+admin.toString();
    }

    //同属性的多对象赋值 需指定对象的前缀
    @InitBinder("student")
    public void initStudent(WebDataBinder binder){
        binder.setFieldDefaultPrefix("student.");
    }

    //同属性的多对象赋值 需指定对象的前缀
    @InitBinder("admin")
    public void initStudent2(WebDataBinder binder){
        binder.setFieldDefaultPrefix("admin.");
    }

4.List&Set&Map

public class ListFrom {
    private List<Student> users ;

    getter setter...

    @Override
    public String toString() {
        return "ListFrom [users=" + users + "]";
    }

}
public class MapFrom {
    private Map<String, Student> users ;

    getter setter...

    @Override
    public String toString() {
        return "MapFrom [users=" + users + "]";
    }   

}
@RestController
public class DataController {

    //List对象
    //http://127.0.0.1:8080/Spring/list?
    //users[0].age=10&users[1].name=Tom
    @RequestMapping(value="/list", method = RequestMethod.GET, produces={"text/html;charset=UTF-8"})    //支持中文
    public String object2(ListFrom s){
        return s.toString();
    }

    //Map对象
    //http://127.0.0.1:8080/Spring/map?
    //users["X"].age=10&users["Y"].name=Tom
    @RequestMapping(value="/map", method = RequestMethod.GET)   
    public String object3(MapFrom s){
        return s.toString();
    }
}

5.Json或Xml 数据参数

@RequestBody 注解
    //发送json数据到该url即可实现数据绑定
    @RequestMapping(value="/json", method = RequestMethod.POST) 
    public String object3(@RequestBody Student s){
        return s.toString();
    }

对于xml数据,需要在实体类中添加注释

然后

    //发送xml数据到该url即可实现数据绑定
    @RequestMapping(value="/xml", method = RequestMethod.POST)  
    public String object3(@RequestBody Admin s){
        return s.toString();
    }

6. PropertyEditor、Formatter、Converter

局部配置

    //PropertyEditor
    //http://127.0.0.1:8080/Spring_iMooc/date1?date1=2018-01-01
    @RequestMapping(value="/date1", method = RequestMethod.GET) 
    public String date1(Date date1){
        return date1.toString();
    }
    @InitBinder("date1")
    public void initDate1(WebDataBinder binder){
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
    }

全局配置 1)自定义Formatter

2)注入

3)使用

也可以使用自定义Converter 1)自定义

2)配置

3)使用

7.RESTful扩展

简单来说,就是把参数移到URL上,比如下面。

   https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/pdf/spring-boot-reference.pdf  http://jbk.39.net/xebm/

使用方法

@RequestMapping("/subject/{name}")public String demo(@PathVariable("name") String name){  return name;}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊kafka consumer offset lag的监控

在0.8.2.2版本如下 kafka_2.10-0.8.2.2-sources.jar!/kafka/tools/ConsumerOffsetChecker.s...

3671
来自专栏LEo的网络日志

InnoSetup功能函数合集

40411
来自专栏函数式编程语言及工具

Scalaz(49)- scalaz-stream: 深入了解-Sink/Channel

   一个完整的scalaz-stream有以下几个部分组成:Source -> Transducer -> Sink,用直白文字来描述就是:“输入 -> 传换...

2208
来自专栏JavaEdge

SpringMVC之Controller查找(Spring4.0.3/Spring5.0.4源码进化对比)0 摘要1 SpringMVC请求流程2 SpringMVC初始化过程总结

4346
来自专栏码匠的流水账

springboot中使用esper入门

esper是一个比较经典的CEP(Complex Event Processing)的开源实现(开源协议为GPL v2),这里简单介绍下如何在springboo...

2261
来自专栏Google Dart

为控制器配置日期处理 原

621
来自专栏Java帮帮-微信公众号-技术文章全总结

Spring-IOC(2)

scope <!--Spring使用scope标签来制定bean的作用域(默认为Singleton)--> <bean id="singletonBean" c...

34810
来自专栏从零开始的linux

rename命令

rename命令用字符串替换的方式批量改变文件名 语法: rename(参数) 参数: 原字符串:将文件名需要替换的字符串,必须得是确定的字符,如果写*,可能会...

37710
来自专栏小樱的经验随笔

Codeforces 833E Caramel Clouds

E. Caramel Clouds time limit per test:3 seconds memory limit per test:256 megaby...

3447
来自专栏函数式编程语言及工具

FunDA(3)- 流动数据行操作:FDAPipeLine operations using scalaz-stream-fs2

在上节讨论里我们介绍了数据行流式操作的设想,主要目的是把后台数据库的数据载入前端内存再拆分为强类型的数据行,这样我们可以对每行数据进行使用和处理。形象点描述就是...

2218

扫码关注云+社区

领取腾讯云代金券