首页 > 其他分享 >springboot请求响应

springboot请求响应

时间:2023-04-03 22:14:08浏览次数:35  
标签:code return String 响应 Result 请求 message public springboot

springboot请求响应

1.什么是请求?响应?

请求:获取请求数据

响应:设置响应数据

2.原始方法获取请求数据

Controller方法形参中声明HttpServletRequest对象
调用对象的getParameter(参数名)

这种方式复杂繁琐

 //    @RequestMapping("/simpleParam")
// 原始方式
//创建请求对象
// public String simpleParam(HttpServletRequest httpServletRequest){
//获取请求参数
//
// String name = httpServletRequest.getParameter("name");
// String ageStr = httpServletRequest.getParameter("age");
// int age=Integer.parseInt(ageStr);
// System.out.println(name+":"+age);
// return "ok";
// }

3.SpringBoot方法获取请求数据

3.1简单参数的获取

请求参数名与方法形参变量名相同SpringBoot能自动映射封装
封装的时候还会自动进行类型转换



//   方法形参和请求参数保持一致可以正常获取数据值
// @RequestMapping("/simpleParam")
// public String simpleParam(String name,int age){
// System.out.println(name+":"+age);//tom/41
// return "ok";
// }

3.2参数一致时简单参数的获取

方法形参名称与请求参数名称不匹配,通过该注解完成映射
该注解的required属性默认是true,代表请求参数必须传递

//       springboot提供了@RquestParam注解完成映射,required默认值为true表示是必须的,如果是可选的可以设置为false,defaultValue设置默认值
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(value = "name",required = false,defaultValue = "cs") String username,int age){
System.out.println(username+":"+age);//Tom,41
return "ok";
}

当参数不一致时无法获取参数

//    当参数不一致时无法获取值
// @RequestMapping("/simpleParam")
// public String simpleParam(String username,int age){
// System.out.println(username+":"+age);//null,41
// return "ok";
// }
s
 
 

3.3简单实体

请求参数名与形参对象属性名相同,即可直接通过POJO接收

   简单参数作为数据传递方式时,前端传多少请求,接收就要写多少个形参,比较繁琐,可以将数据封装到一个实体对象中,完成传输
// 要求:请求参数名字和实体类属性一致,权限修饰符的原因可能需要导包
@RequestMapping("/simplePojo")
public String simpleParam(User user){
System.out.println(user);//User{name='Tom', age=41}
return "ok";
}

参数不一致的情况

//参数不一致的情况
@RequestMapping("/complexPojo")
public String simpeParam(User user){
System.out.println(user);//User{name='null', age=41}
return "ok";
}

3.4数组参数

数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装

 接收一个参数名多个值时,可以定义数组接收参数
// @RequestMapping("/arrayParam")
// public String arrayParam(String[] hobby){
// System.out.println(Arrays.toString(hobby));//[basketball, football]
// return "ok";
// }

3.5集合参数

集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系

 

 @RequestMapping("/listParam")
// public String listParam(@RequestParam List<String> hobby){
// System.out.println(hobby);//[basketball, football]
// return "ok";
// }

3.5日期参数

要用@DateTimeFormat来定义格式化形式

  @RequestMapping("/dateParam")
// public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime date){
// System.out.println(date);
// return "ok";
// }

3.6json

要接收json数据请求,必须要是post请求,并以josn的格式发送

1、Json的key要和POJO实体类的属性名相同。
2、@ResponseBody:写在形参中,表示将请求体中的json数据转换成java对象

   @RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println("user = " + user);
return "ok";

}

3.7路径

路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable 获取路径参数

@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println("id = " + id);
return "ok";

}

 4.如何统一响应结果

定义Result实体类

/**
* 统一响应结果封装类
*/
public class Result {
private Integer code;
private String message;
private Object data;

public Result() {
}

//适用于增删改
public Result(Integer code, String message) {
this.code = code;
this.message = message;
}

//适用于查询
public Result(Integer code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public static Result success(){
Result result = new Result();
result.code=1;
result.message="success";
return result;
}
public static Result success( Object data){
Result result = new Result();
result.code=1;
result.message="success";
result.data=data;
return result;
}
public static Result error(){
Result result = new Result();
result.code=0;
result.message="failure";
return result;
}
public static Result error(String msg){
Result result=new Result();
result.code=0;
result.message=msg;
return result;
}

@Override
public String toString() {
return "Result{" +
"code=" + code +
", message='" + message + '\'' +
", data=" + data +
'}';
}

public Integer getCode() {
return code;
}

public void setCode(Integer code) {
this.code = code;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public Object getData() {
return data;
}

public void setData(Object data) {
this.data = data;
}
}

在Controller层方法中统一返回Result对象

@RequestMapping("/listEmp")
public Result listEmp() {


return Result.success(empService.listEmp());

}

 

5.三层架构

  • dao层(数据访问)

数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数

 

 

 @Repository
public class EmpDaoImpl implements EmpDao {


@Override
public List<Emp> listEmp() {
List<Emp> empList = XmlParserUtils.parse("emp.xml", Emp.class);

return empList;
}
}

  • service层(逻辑处理)

Service:业务逻辑层,处理具体的业务逻

 

 

 @Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpDao empDao;

@Override
public List<Emp> listEmp() {
EmpDao empDao = new EmpDaoImpl();
List<Emp> empList = empDao.listEmp();
empList.forEach(emp -> {
String gender = emp.getGender();
if ("1".equalsIgnoreCase(gender)){
emp.setGender("男");
}else if ("2".equalsIgnoreCase(gender)){
emp.setGender("女");
}
String job = emp.getJob();
if ("1".equalsIgnoreCase(job)){
emp.setJob("讲师");
}else if ("2".equalsIgnoreCase(job)){
emp.setJob("班主任");
}else if ("3".equalsIgnoreCase(job)){
emp.setJob("就业指导");
}
});
return empList;

}
}

  • controller(请求响应)

Controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据

 

//处理员工请求
@RestController
public class EmpController {
@Autowired
private EmpService empService ;
@RequestMapping("/listEmp")
public Result listEmp() {


return Result.success(empService.listEmp());

}
}

6.分层解耦

6.1什么是内聚 耦合

内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则:高内聚低耦合。

6.3控制反转和依赖注入

控制反转:将对象的创建控制权由程序自身转移给Spring,这种思想称为控制反转。
依赖注入: 由spring容器提供并注入对象数据
Bean对象:IOC容器中创建、管理的对象,称之为bean。
实现控制反转

第1步:删除Controller层、Service层中new对象的代码

 

 第2步:Service层及Dao层的实现类,交给IOC容器管理

使用Spring提供的注解:@Component ,就可以实现类交给IOC容器管理

第3步:为Controller及Service注入运行时依赖的对象

使用Spring提供的注解:@Autowired ,就可以实现程序运行时IOC容器自动注入需要的依赖对象

三个component衍生注解

@Controller 标注在控制器类上

 

@Service标注在业务类上

@Repository标注在数据访问类上(由于与mybatis整合,用的少)

@Component不属于以上三类时,用此注解

因为@RestController=@Controller+@ResponseBody 所以使用@RestController就行

其中声明控制器bean只能用@Controller和@RestController。

6.4组件扫描

使用四大注解声明的bean,要想生效,还需要被组件扫描注解@ComponentScan扫描

@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了引导类声明注解 @SpringBootApplication 中,默认扫描的范围是SpringBoot启动类所在包及其子包

6.5当存在多个相同类型bean注入时的解决方案

1.@Primary注解:当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。

2.@Qualifier注解不能单独使用,必须配合@Autowired使用

3.使用@Resource注解

 

@Autowird 与 @Resource的区别

  • @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解

  • @Autowired 默认是按照类型注入,而@Resource是按照名称注入



标签:code,return,String,响应,Result,请求,message,public,springboot
From: https://www.cnblogs.com/zlsame/p/17284625.html

相关文章

  • Springboot JSON整合—官方原版
    SpringBoot提供与三个JSON映射库的集成:GsonJacksonJSON-BJackson是首选和默认库。一、Jackson提供了Jackson的自动配置,Jackson是springbootstarterjson的一部分。当Jackson在类路径上时,会自动配置一个ObjectMapperbean。提供了几个配置财产,用于自定义ObjectMapper的配置。1.......
  • Flask快速入门day02(1、CBV使用及源码分析,2、模板用法,3、请求与响应的基本用法,4、sessi
    目录Flask框架一、CBV分析1、CBV编写视图类方法二、CBV源码分析1、CBV源码问题2、补充问题3、总结三、模板1、py文件2、html页面四、请求与响应1、request常用方法2、response常用方法五、session及源码分析1、session的基本使用2、session源码分析六、闪现七、请求扩展Flask框......
  • flask CBV写法/中间件/异常捕获/请求与响应/session/请求扩展
    flaskcbv写法基于类的视图写法fromflaskimportFlask,requestfromflask.viewsimportMethodView,Viewapp=Flask(__name__)app.debug=True#必须要继承MethodView这个类来编写classLoginView(MethodView):defget(self):print(request.method)......
  • 【Flask】cbv源码分析 flask模板使用 flask请求与响应 session及源码分析 闪现flash
    目录上节回顾今日内容1cbv分析1.1源码分析2模板2.1app.py2.2index.html3请求与响应4session及源码分析4.1session的使用4.2源码分析4.3session执行原理5闪现6请求扩展练习上节回顾#1web框架 -django大而全-flask小而精-sanic-fastapi-同......
  • flask-day2——cbv源码分析、模版语法、请求与响应、session及源码分析、闪现、请求扩
    目录一、cbv源码分析1.1基于类的视图写法1.2源码分析1.3分析源码,查找不传别名的时候为什么函数名会变成别名1.4flask的路由注册使用装饰器,如果写了一个登录认证装饰器,那么应该放在路由装饰器上还是下?1.5dispatch_request讲解1.6知识点总结二、模板语法2.1py2.2html三、请......
  • 怎么在springboot中配置https证书的详细教程
    前言由于小程序需要https,然后之前申请的域名过期了,用了两年由于忘记续费要将域名赎回居然要1200....想了一下之前还有另一个域名,干脆就用这个域名弄个二级域名出来,所以二级域名建立出来后需要在springboot项目上开启https访问废话不多说,开整在阿里云新建二级域名这个......
  • SpringBoot启动异常的错误①
    java:无法访问org.springframework.boot.SpringApplication错误的类文件:/D:/maven/repository/org/springframework/boot/spring-boot/3.0.5/spring-boot-3.0.5.jar!/org/springframework/boot/SpringApplication.class类文件具有错误的版本61.0,应为52.0 2023-04......
  • flask 请求与响应,session使用与源码分析,闪现与请求扩展
    目录cbv分析总结模板请求与响应请求:全局的request响应:新手四件套session使用及源码分析cookie与sessionsession执行原理session源码分析闪现作用用法请求扩展cbv分析基于类的视图cbv写法fromflaskimportFlask,request#视图基类fromflask.viewsimportMethodViewa......
  • springboot 日志
    <loggername="com.sinoservices.chainwork.bms"level="INFO"/><loggername="org.hibernate.orm.deprecation"level="error"/><loggername="druid"additivity="true"><levelval......
  • 26-springboot-thymeleaf字符串拼接-常量-符号
    Thymeleaf字符串拼接一种是字符串拼接:<spanth:text="'当前是第'+${sex}+'页,共'+${sex}+'页'"></span>另一种更简洁的方式,使用“|”减少了字符串的拼接:<spanth:text="|当前是第${sex}页,共${sex}页|"></span>Thymeleaf可直接使用的常量和符号1、所有......