1.简单的Springbootweb程序入门
1.创建工程,填写模块信息,勾选web开发
2.定义一个请求处理类
controller包下定义一个请求处理类,请求处理路径是/hello
当输入/hello请求路径时,执行hello方法,服务端会返回hello给浏览器
3. 选择主函数下启动类,启动Springboot工程
4.效果展示
浏览器输入路径/hello时,服务器执行hello方法并返回hello给浏览器
2.请求参数的接收
1.原始web程序
原始web获取请求参数
需要创建HttpServletRequest对象,调用getParmeter接收,
并且如果参数不是int,需要进行类型转化
HttpServletRequest
公共接口类HttpServletRequest继承自ServletRequest。客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法
HttpServletresponse
HttpServletResponse继承了ServletResponse。专门为基于HTTP协议的HTTPServlet 封装、提供响应信息,是响应的抽象。
2.sprintboot方式 直接定义形参接收
3.不同请求参数的接收
//参数为简单参数 请求参数名和变量名相同
public int simpleParm(int id) {
System.out.println(id);
return id;
}
//参数为简单参数 请求参数名和变量名不同
@RequestMapping("/simpleDifParam")
public int simpleDifParm(@RequestParam(name = "id", required = false) int Stuid) {
//@RequestParam(name = " 请求参数名") Stuid是接收参数名
System.out.println(Stuid);
return Stuid;
}
@RequestMapping("/simplePolo")
//参数为实体对象,定义一个类,封装对象
//传入的请求参数会自动填入形参的user对象属性里面去
//比如user对象有2个属性,name和age 传入请求参数name="小明" age=20,会自动给Uesr对象属性赋值
public String simplePolo(User user) {
System.out.println(user);
return "ok";
}
@RequestMapping("/arrayParam")
//请求参数名相同,数组接收
public String arrayParam(String[] task) {
System.out.println(Arrays.toString(task));
return "ok";
}
@RequestMapping("/listParam")
// 请求参数名相同,集合接收加入注解@RequestParam
// http://localhost:8080/listParam?task=java&task=web&task=mysql
public String listParam(@RequestParam List<String> task) {
//RequestParam
for (int i = 0; i < task.size(); i++) {
System.out.println(task.get(i));
}
return "ok";
}
//参数是日期类型
//需要使用@DateTimeFormat注解
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd")LocalDateTime time) {
System.out.println(time);
return "ok";
}
@RequestMapping("/jsonParam")
//请求参数是json格式时,使用注解@RequestBody,形参定义一个对象,json的key对应对象的属性
public String jsonParam(@RequestBody User user) {
System.out.println(user);
return "ok";
}
需要注意参数是实体对象和json时形参都是对象接收,但json格式需要使用注解@RequestBody
4.响应数据
1.ResponseBody
ResponseBody把当前类下面的所有方法返回值返回,如果是实体对象或者集合,以json格式返回
我们定义Controller类时,上面添加的注解@RestController就是隐含Responsebody
@RestController=@Controller+@Responsebody
2.设置统一响应数据的格式
如果返回数据格式不一致,有的是字符串,有的是json格式,就会难以管理,需要按照统一格式返回,便于管理
定义使用Result类返回固定格式代码
Result除了设置属性还要有一些方法
5.统一响应数据格式案例
小项目
自动获取员工数据,以统一格式响应数据,在页面展示
1..导入Emp实体类 导入Emp.xml文件
Emp实体类就是员工类,有员工对应的属性已经构造方法,getset方法
Emp.xml文件提供员工具体数据
2.导入解析XML文件的工具类
工具类内部parse方法把文件(xml)中的数据解析 返回到对应类型的list集合中中
3.导入前端资源
放入static目录下
Springboot项目静态资源(html css js等前端资源)
默认存放目录是clsaapath:/static classpath:/public classpath:/resources
使用Springboot官方项目结构自动创建的resource的static
java目录下存放java
Resource目录存放其他类型的文件
4.编写empcontroller程序
作用:处理请求,响应数据
package com.itheima.controller;
import com.itheima.popo.Emp;
import com.itheima.popo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import until.XmlParserUtils;
import java.util.List;
@RestController
public class EmpController {
@RequestMapping("/listEmp")
public Result list() {
//1.加载解析emp.xml
String file = getClass().getClassLoader().getResource("emp.xml").getFile();
List<Emp> emplist = XmlParserUtils.parse(file, Emp.class);
//XmlParserUtils工具解析文件封装到Emp集合emplist中
//2.对数据进行转化处理
//比如把编号转为具体性别
emplist.stream().forEach(emp -> {
String gender = emp.getGender();
if ("1".equals(gender)) {
emp.setGender("男");
} else if (
"2".equals(gender)
) {
emp.setGender("女");
}
String job = emp.getJob();
if ("1".equals(job)) {
emp.setJob("班长");
} else if ("2".equals(job)) {
emp.setJob("支书");
} else if ("3".equals(job)) {
emp.setJob("生活委员");
}
});
//3.响应数据 以Result固定的格式类返回
return Result.success(emplist);
}
}