第03讲 第二次创建控制器

从上一讲可知,@Controller负责处理由DispatcherServlet 分发的请求。那么我们要向服务器获取数据怎么办?这就需要我们再介绍@RestController。@RestController是由@Controller与@ResponseBody的合体。
下面看例子。

  • 创建Book实体
    创建包 com.zjipc.bookstore.model,并在该包里创建Book类,代码如下:
package com.zjipc.bookstore.model;

/**
 * 描述书的实体
 * @author Administrator
 *
 */
public class Book {
	private String id;
	private String name;
	private String isbn;
	private double price;
	private int quantity;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getIsbn() {
		return isbn;
	}

	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public int getQuantity() {
		return quantity;
	}

	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
}

  • 创建Book控制器
    在包com.zjipc.bookstore.controller中创建BookController类,代码如下:
package com.zjipc.bookstore.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.zjipc.bookstore.model.Book;

@RestController
public class BookController {

	@RequestMapping("/book/list")
	public List list() {
		List books = new ArrayList<>();
		Random rand = new Random();
		for (int i = 0; i < 5; i++) {
			Book book = new Book();
			book.setId(String.valueOf(i+1));
			book.setName("SpringBoot入门"+i);
			book.setIsbn("12211");
			book.setPrice(rand.nextDouble()*20);
			book.setQuantity(rand.nextInt(100));
			books.add(book);
		}
		return books;
	}
}

重新启动Boot App,在浏览器中输入:http://localhost:8080/book/list,可以看到浏览器返回的数据为:

[
  {
    "id": "1",
    "name": "SpringBoot入门0",
    "isbn": "12211",
    "price": 18.277636756356046,
    "quantity": 70
  },
  {
    "id": "2",
    "name": "SpringBoot入门1",
    "isbn": "12211",
    "price": 2.7292917024149976,
    "quantity": 21
  },
  {
    "id": "3",
    "name": "SpringBoot入门2",
    "isbn": "12211",
    "price": 7.156099892250478,
    "quantity": 94
  },
  {
    "id": "4",
    "name": "SpringBoot入门3",
    "isbn": "12211",
    "price": 11.252900820341871,
    "quantity": 91
  },
  {
    "id": "5",
    "name": "SpringBoot入门4",
    "isbn": "12211",
    "price": 17.07153518452119,
    "quantity": 88
  }
]

大家比较@Controller与@RestController的区别。
区别1:
控制器Controller 负责处理由DispatcherServlet 分发的请求。
@Controller注解的类,会作为访问的路径映射处理,不加特殊处理的返回值会被作为跳转路径。@RestController,就是@Controller + @ResponseBody 注解的综合,返回值如果是实体,一般作为json数据返回,也可以定制返回值。

区别2:
@Controller类的方法,返回类型是String,内容是页面路径名;
@RestController类的方法,返回类型是对象或者对象数组,内容是JSON格式的数据。
需要注意的是,@RestController注解的类的方法,在返回数据时,框架会自动将数据实体转换为JSON格式,无需用户在代码中转换。

你可能感兴趣的:(Spring,Boot学习)