SpringMVC數據綁定示例

基本說明:java

​ 類使用了@RestController註解web

基本類型

@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時輸出:spring

param1=666,param2=333

注意項:json

使用基本類型進行數據綁定的時候,必須對參數進行賦值,否則會報錯。數組


包裝類型

@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時輸出:app

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時輸出:maven

language=[java, kotlin, scala]

對象

示例對象:ide

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時輸出:this

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

多對象同名屬性

示例對象:scala

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"
    }
}
相關文章
相關標籤/搜索