文档章节

SpringMVC数据绑定示例

囚徒困境
 囚徒困境
发布于 2017/07/21 00:42
字数 657
阅读 42
收藏 1

基本说明:

​ 类使用了@RestController注解

基本类型

@RequestMapping("test1")
public Object test1(int param1,long param2){
  return String.format("param1=%s,param2=%s", param1,param2);
}

访问http://127.0.0.1:8080/test1?param1=666&param2=333时输出:

param1=666,param2=333

注意项:

使用基本类型进行数据绑定的时候,必须对参数进行赋值,不然会报错。


包装类型

@RequestMapping("test2")
public Object test2(Integer param1,Long param2){
  return String.format("param1=%s,param2=%s", param1,param2);
}

访问http://127.0.0.1:8080/test1?param1=666时输出:

param1=666,param2=null

数组

@RequestMapping("test3")
public Object test3(String[] language){
  return String.format("language=%s", Arrays.toString(language));
}

访问http://127.0.0.1:8080/test3?language=java&language=kotlin&language=scala时输出:

language=[java, kotlin, scala]

对象

示例对象:

public class Book {

	private String name;
	
	private BookDetail bookDetail;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public BookDetail getBookDetail() {
		return bookDetail;
	}

	public void setBookDetail(BookDetail bookDetail) {
		this.bookDetail = bookDetail;
	}

	@Override
	public String toString() {
		return "Book [name=" + name + ", bookDetail=" + bookDetail + "]";
	}

}
	@RequestMapping("test4")
	public Object test4(Book book){
		return book;
	}

访问http://127.0.0.1:8080/test4?name=Hello&bookDetail.ISBN=7-111-14305-1/TP时输出:

{"name":"Hello","bookDetail":{"isbn":"7-111-14305-1/TP"}}

多对象同名属性

示例对象:

public class Student {

	private String name;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + "]";
	}
}
@InitBinder("book")
public void initBookPrefix(WebDataBinder webDataBinder){
	webDataBinder.setFieldDefaultPrefix("book.");
 }

@InitBinder("student")
public void initStudentPrefix(WebDataBinder webDataBinder){
	webDataBinder.setFieldDefaultPrefix("student.");
}

@RequestMapping("test5")
public Object test5(Book book,Student student){
	return book + "  <br>  " + student;
}

访问http://127.0.0.1:8080/test5?book.name=Hello&bookDetail.ISBN=7-111-14305-1/TP&student.name=World时输出:

Book [name=Hello, bookDetail=BookDetail [ISBN=7-111-14305-1/TP]] 
Student [name=World]

Map

@RequestMapping("test6")
public Object test6(@RequestParam Map<String, String> params){
	return params;
}

访问http://127.0.0.1:8080/test6?name=66&age=7&status=0时输出:

{"name":"66","age":"7","status":"0"}

在多参数搜索的时候,用Map作为入参,可以方便增减搜索参数。


Json

需增加Jackson的依赖,来支持JSON格式的参数,maven坐标如下:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>${jackson.version}</version>
</dependency>
@RequestMapping("test7")
public Object test7(@RequestBody Book book){
  return book;
}

访问时,请求头添加:Content-Type: application/json,请求体如下:

{
	"name":"Hello",
	"bookDetail":{
		"isbn":"666"
	}
}

输出:

{
    "name": "Hello",
    "bookDetail": {
        "isbn": "666"
    }
}

XML

网上很多例子都是使用spring-oxm依赖,再对实体类增加注解来增加对XML的支持,这里的示例使用Jackson依赖,来支持XML格式的参数,并且不需要对实体类增加注解,maven坐标如下:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>${jackson.version}</version>
 </dependency>
 <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
  	<version>${jackson.version}</version>
 </dependency>
 <dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>${jackson.version}</version>
 </dependency>
 <dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
  <version>2.8.7</version>
 </dependency>
@RequestMapping("test8")
public Object test8(@RequestBody Book book){
  return book;
}

访问时,请求头添加:Content-Type: application/xml,请求体如下:

<root>
	<name>Hello</name>
	<bookDetail>
		<isbn>666</isbn>
	</bookDetail>
</root>

输出:

{
    "name": "Hello",
    "bookDetail": {
        "isbn": "666"
    }
}

© 著作权归作者所有

囚徒困境
粉丝 15
博文 25
码字总数 11216
作品 0
深圳
程序员
私信 提问
加载中

评论(1)

青春不再
青春不再
大神666
Spring Data Redis 详解及实战一文搞定

SDR - Spring Data Redis的简称。 Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能。它提供了与商店互动的低级别和高级别抽象,使用户免受基础设施问题的困扰。 Spring B...

Java技术栈
2018/09/10
0
0
Spring MVC SessionAttribute学习

小博老师在上节给大家介绍了ModelAttribute的使用方法,相信你已掌握了 SpringMVC是 如何管理 model 数据的。这一节我们将继续关注 SpringMVC 是如何处理session 数据的。 SpringMVC可以使用...

博为峰教研组
2016/12/14
30
0
Controller接口控制器学习2

本文为转载学习 原文链接:http://jinnianshilongnian.iteye.com/blog/1611743 ServletForwardingController 将接收到的请求转发到一个命名的servlet,具体示例如下: package cn.javass.ch...

heroShane
2014/01/25
48
0
Spring-data-redis配置及使用示例

Spring-data-redis配置及使用示例 一、添加maven依赖 <!-- redis --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.5.0.......

nibilly
2015/05/14
824
0
Camel In Action 读书笔记 (5)

接下来说说第四章, 第四章介绍如何在Camel中使用普通bean,关于bean的使用方式前面已有介绍:javaDSL和SpringDSL两种方式。 下面讲下bean的Camel中的使用模式。 The Service Activator patt...

vidy_tu
2013/06/09
580
0

没有更多内容

加载失败,请刷新页面

加载更多

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
6
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.7K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部