一、Spring和SpringBoot
Spring发展到如今形成了一种开发生态圈,Spring提供若干个子项目,每个项目用于完成特定的功能。
因为spring配置繁琐
springboot可以简化配置,快速构建应用程序,简化开发,提高效率
二、SpringBoot快速入门
1.创建Spring工程
旋转spring项目,java语言,maven类型
选择web的第一项的spring web
2.查看工程
可以看到里面有Springtestapplication这个类,代表启动springboot工程
这是配置文件
3.创建请求处理类
可以创建一个controller文件夹里面放请求接口的类
创建一个方法
package com.rosen.controller;
public class HelloController {
public String hello()
{
System.out.println("hello world");
return "hello";
}
}
但是还不是一个请求处理类,在方法上面加入@RestController ,还要定义接口路径
package com.rosen.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello()
{
System.out.println("hello world");
return "hello";
}
}
运行后可以看到,端口号为8080
在浏览器输入 localhost:8080/hello 就可以进行页面展示了。而看到其实spring项目其实内置tomcat的
三、SpringBoot获取请求参数
注意如果想要调用post接口测试的化,可以利用postman进行接口请求了
1.简单参数
(1)原始方式
就像原来的maven的web项目的时候,通过request获取通过键来获取数据
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request){
String name=request.getParameter("name");
String sage=request.getParameter("age");
int age=Integer.parseInt(sage);
System.out.println(age+":"+name);
return "OK";
}
}
(2)springBoot方式
创建变量和键的名字相同,直接获取,会自动进行数据类型转换,如果没有则没有数据
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
//spring会自动类型转换
public String simpleParam(String name,Integer age){
System.out.println(age+":"+name);
return "OK";
}
}
当然这个还可以进行映射,比如你获取键为name的用户,想用username接收怎么办
当然也可以设置是否必须要有这个参数,required设置为true必须要有
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
//spring会自动类型转换
public String simpleParam(@RequestParam(name="name",required = false)String username, Integer age){
System.out.println(age+":"+username);
return "OK";
}
}
2.实体参数
接收参数很多的化,我不能写一个又一个的参数接收吧,我可以写一个类,进行接收
我创建一个pojo代表可以使用的类
package com.example.quicek.pojo;
public class User {
private String name;
private Integer age;
private Adress adress;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Adress getAdress() {
return adress;
}
public void setAdress(Adress adress) {
this.adress = adress;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", adress=" + adress +
'}';
}
}
在只要属性名和传来的键名称相同即可接收,如过类里面包含类,则键:adress.属性名就好了
package com.example.quicek.Controller;
import com.example.quicek.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController{
@RequestMapping("/simplePojo")
//spring会自动类型转换
public String simpleParam(User user){
System.out.println(user);
return "OK";
}
}
3.数组集合参数
(1)数组方式
表单的复选框组件会传来一个数组的数据,多个值怎么获取呢?
那么就可以用集合进行获取
@RequestMapping("/getmore")
public String getmore(String []hobby)
{
System.out.println(Arrays.toString(hobby));
return "OK";
}
}
(2)集合方式
需要在前面加上@RequestParam
@RequestMapping("/getmore")
public String getmore(@RequestParam List<String> hobby)
{
System.out.println(hobby);
return "OK";
}
}
4.日期参数
需要@DateTimeFormat(pattern="")代表前端需要传递过来的格式
而且创建的实例update也对应这前端的键
@RequestMapping("/getdate")
public String getdate(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDate update)
{
System.out.println(update);
return "OK";
}
5.Json参数
postman先设置json格式
为了接收我们可以用类来接收
User类
Adress类
要注意类的属性必须和传来的数据一致
则控制器里面必须是@RequestBody才可以获取body的数据
@RequestMapping("/getParam")
public String getParam(@RequestBody User user)
{
System.out.println(user);
return "OK";
}
6.路径参数
通过url直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数
需要把/path/后面设为变量,然后把@PathVariable 之后的参数对应上面的变量参数
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id)
{
System.out.println(id);
return "OK";
}
当然也可以多层
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id,@PathVariable String name)
{
System.out.println(id+name);
return "OK";
}
四、SpringBoot设置响应数据
每次return作为一个参数返回,其实都依靠一个注解@ResponseBody
而我们RestController其实已经包含这个注解了
1.直接返回
@RequestMapping("/hello")
public String hello()
{
return "hello";
}
2.对象返回
@RequestMapping("/getAddr")
public Adress getAddr()
{
Adress addr=new Adress();
addr.setCity("河南");
addr.setProvince("郑州");
return addr;
}
3.集合返回
@RequestMapping("/getList")
public List<Adress> getList()
{
List<Adress> list=new ArrayList<>();
Adress addr=new Adress();
addr.setCity("河南");
addr.setProvince("郑州");
Adress addr1=new Adress();
addr1.setCity("北京");
addr1.setProvince("北京");
list.add(addr);
list.add(addr1);
return list;
}
统一格式
大家会发现格式都是不同的,那可以用一个类统一格式
成员变量
还有三个方法
可以只返回不同形式
举例: