想要响应请求需要实现Servlet接口
springboot中DispatcherServlet实现了此接口
前端请求会被DispatcherServlet封装为HttpServletRequest对象
并通过HttpservletResponse对象响应数据
BS架构
方法一:通过原始httpservletRequest(了解即可)
繁琐、手动类型转换
@RestController
public class RequestController {
@RequestMapping("/simprequest")
public String simpleParam(HttpServletRequest request){
String name=request.getParameter("name");
String age=request.getParameter("age");
System.out.println(name+"你的年龄是:"+age);
return "OK";
}
}
方法二:springboot方式
简单参数:参数名与形参变量名相同、定义形参即可接收参数
如果参数名不相同则接收失败
但可以通过@RequestParam(name=“指定接收参数的名字”) String 自己定义的名字
默认参数true(必须传递这个参数)
按需要改为false
@RestController
public class RequestController {
@RequestMapping("/simprequest")
public String simpleParam(String name,Integer age){
System.out.println(name+"你的年龄是:"+age);
return "OK";
}
}
方法一:springboot方式
实体参数
简单实体对象:
请求参数名与形参对象属性名对应
应以POJO(普通的 Java 对象)接收即可
@RestController
public class RequestController {
@RequestMapping("/simprequest")
public String simpleParam(User user){
System.out.println(user.getName()+"你的年龄是:"+user.getAge());
return "OK";
}
}
方法二:springboot方式
实体参数
复杂实体参数:
请求参数名与形参对象属性名对应
按照对象层次结构关系即可接收嵌套POJO属性参数
方法一:数组参数
请求参数名与形参数组名称相同且请求参数为多个
定义数组类型形参即可接收
@RequestMapping("/arrayParam")
public String arrayParam(String hobby){
System.out.println(hobby);
return "OK";
}
方法二:集合参数
请求参数名与形参集合名称相同且请求参数为多个
@RequestParam绑定参数关系
@RequestMapping("/listParam")
public String listParam(@RequestParam ArrayList<String> hobby){
System.out.println(hobby);
return "OK";
}
使用@DataTimeFormat注解完成日期参数格式转换
@RequestMapping("/timeParam")
public String timeParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime ldt){
System.out.println(ldt);
return "OK";
}
JSON数据键名与形参对象属性名相同
定义POJO类型形参即可接收参数
需要使用@RequestBody标识
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
通过请求URL直接传递参数,使用{…}来标识该路径参数
需要使用@PathVariable获取路径参数
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable int id){
System.out.println(id);
return "OK";
}
@ResponseBody
类型:方法注解、类注解
位置:Controller方法上、类上
作用:
将方法返回值直接响应
如果返回值类型是 实体对象、集合
将会转换为JSON格式响应
说明:@RestController=@Controller+@ResponseBody
虽然可以响应任何数据类型
但是前端解析成本较高
约定统一响应格式:
public class Result {
//响应码
private Integer code;
//提示信息
private String msg;
//返回数据
private Object data;
}
Result
Dao(数据访问层):数据访问(增删改查)
service(业务逻辑层):逻辑处理
Controller(控制访问层):接收请求(相应数据)
内聚:软件中各个功能模块内部的功能联系
耦合:衡量软件中各个层、模块之间的依赖、关联程度
软件开发目标:高内聚、低耦合
控制反转:
IOC,对象的创建控制权由程序自身转移到外部(容器)、这种思想称为控制反转
依赖注入:
DI,容器为应用程序提供运行时所依赖的资源,称为依赖注入
Bean对象:IOC容器中创建、管理的对象,称为bean
IOC/DI入门步骤:
1、Service层及Dao层的实现类,交给IOC容器管理(加上@component注解)
2、为Controller及Service注入运行时,依赖的对象(加上@Autowired注解)
3、运行测试
IOC细节:
一般用component的衍生类
@Service
@Repository
@Controller
Bean组件扫描:
声明bean的四大注解,要想生效,还需要被扫描注解@ComponentScan扫描
@ComponentScan注解虽然没有显式配置,但实际已经包含在启动声明注解
@SpringBootApplication中,默认扫描的范围是启动类所在包以及子包
DI细节:
@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,会报错
解决方案:
@Primary//优先级(重复时用谁)
@Qualifier//指定用谁(名字)默认类型首字母小写
@Resource//不要用@Autowired(不是一个体系),直接@Resource(name=“”)
@Resource与@Autowired的区别
1:前者是JDK提供的注解、后者是spring框架提供的注解
2:前者按照name注入,后者按照类型注入