欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java SpringBootWeb请求响应举例详解,

来源: javaer 分享于  点击 10452 次 点评:120

java SpringBootWeb请求响应举例详解,


目录
  • Servlet
    • javaweb的工作原理
  • 请求
    • 简单参数
      • 使用SpringBoot方式
      • 使用postman进行测试
      • 参数名不一致
    • 实体参数
      • 简单实体对象
      • 复杂实体对象
    • 数组集合参数
      • 数组参数
    • 集合
      • 集合参数
      • 使用@RequestParam绑定参数关系
    • 日期参数
      • JSON参数
        • 使用实体类对象接受
      • 路径参数
        • 参数尽量使用包装类
    • 响应
      • @RestController注解
        • 综合案例(解析xml文件传递到前端页面)
          • 前端
          • 后端
      • 分层解耦
        • 三层架构
          • 数据访问:
          • 逻辑处理:
          • 请求处理,响应数据:
        • 按照三个组成部分,将代码分为三层
          • Controller(控制层)
          • Service(业务层)
          • Dao/Mapper(数据访问层/持久层)
        • 分层解耦
          • IOC/DI技术(inversion of control/dependency injection)
        • Bean的声明
          • Bean注入
          • 总结 

            Servlet

            用java编写的服务器端程序

            客户端发送请求至服务器

            服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器

            服务器将响应返回给客户端

            javaweb的工作原理

            在SpringBoot进行web程序开发时,内置了一个核心的Servlet程序DispatcherServlet,称之为核心控制器.

            DispatcherServlet负责接收页面发送的请求,根据资源链接执行的规则,将请求再分发给部署在tomcat中的请求处理器Controller,请求处理器处理完请求之后,最终再由DispatcherServlet给浏览器响应数据.

            浏览器发送请求到后端服务器tomcat后,tomcat会负责解析这些请求数据,将解析后数据传递到Servlet程序的HttpServletRequest对象,意味着HttpServletRequest对象可以获取到请求数据.同时传递了一个HttpServletResponse对象,来给浏览器设置响应数据.

            请求:浏览器->HTTP->tomcat(内置servlet解析)->request对象->数据

            响应:数据->response对象->servlet解析->HTTP->浏览器

            请求

            接收页面传递来的请求数据

            后端接收前端传递的数据

            底层依赖于getset方法进行取值(反射)

            Postman

            一款功能强大的网页调试和发送网页HTTP请求的Chrome插件

            用于接口测试

            接口测试:模拟前端发送请求,检验数据传输的正确性

            界面功能如下所示

            后端资源链接不能重复

            简单参数

            通过Servlet中提供的API HttpServletRequest可以获取请求的相关信息

            @RequestMapping("/simpleParam")
            public String simpleParam(HttpServletRequest request){
            	String name = request.getParameter("name");
            	String age = request.getParameter("age");
            	System.out.println(name+" : "+age);
            	return "OK";
            }
            //request对象中包含请求数据,可以直接通过getParameter()方法进行获取
            

            使用SpringBoot方式

            在SpringBoot环境中,对原始的API进行了封装,接收参数形式更加简单.

            可以直接定义同名参数接收数据.

            @RequestMapping("/simpleParam")
            	public String simpleParam(String name , Integer age ){
            	System.out.println(name+" : "+age);
            	return "OK";
            }
            

            使用postman进行测试

            快速提交带参数的请求

            参数名不一致

            可以使用@RequestParam进行映射

            用法如下

            @RequestMapping("/simpleParam")
            public String simpleParam(@RequestParam("username") String name ,Integer age){
            	System.out.println(name+" : "+age);
            	return "OK";
            }
            //在形参前加上注解完成映射
            

            实体参数

            如果参数数量比较多,可以通过封装到一个pojo对象的方式进行数据封装

            参数名需与POJO属性名一致

            简单实体对象

            定义一个pojo实体类

            public class User {
            	private String name;
            	private Integer age;
                
                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;
                 }
            
             	@Override
             	public String toString() {
            		return "User{" +
            			"name='" + name + '\'' +
            			", age=" + age +
            			'}';
             	}
            }
            

            在controller方法中传入pojo对象接受数据

            @RequestMapping("/simplePojo")
            public String simplePojo(User user){
            	System.out.println(user);
            	return "OK";
            }
            //pojo对象接受与其属性名相同的参数
            

            复杂实体对象

            在实体类中的一个或多个属性为其他实体类的对象

            封装需要遵循如下规则:

            请求参数名与形参对象的属性名相同,即接收属性中的实体类对象属性时,参数需要为对象.属格式.

            数组集合参数

            数组参数

            请求参数名和形参对象属性名相同且请求参数为多个.

            即接收多个同名参数

            传递形式:

            集合

            集合参数

            请求参数名和形参集合对象名字相同且请求参数为多个

            使用@RequestParam绑定参数关系

            @RequestMapping("/listParam")
            public String listParam(@RequestParam List<String> hobby){
            	System.out.println(hobby);
            	return "OK";
            }
            

            传递形式

            日期参数

            对日期类型的参数进行封装的时候,需要通过@DateTimeFormat注解,以及其中的pattern属性来设置日期格式

            pattern属性中制定了前端传递参数时的规格.

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

            传递形式

            JSON参数

            比较复杂的参数可以通过JSON格式进行传输,JSON数据键名和形参对象属性名相同,定义POJO类型形参即可接收参数,controller方法需要使用@RequestBody注解

            使用实体类对象接受

            @RequestMapping("/jsonParam")
            public String jsonParam(@RequestBody User user){
            	System.out.println(user);
            	return "OK";
            }
            

            传递形式

            路径参数

            通过请求URL传递参数,使用{}进行标识,需要使用@PathVariable注解获取路径参数

            参数尽量使用包装类

            @RequestMapping("/path/{id}")
            public String pathParam(@PathVariable Integer id){
            	System.out.println(id);
            	return "OK";
            }
            
            @RequestMapping("/path/{id}/{name}")
            public String pathParam2(@PathVariable Integer id, @PathVariable
            String name){
            	System.out.println(id+ " : " +name);
            	return "OK";
            }
            

            传递形式

            响应

            @RestController注解

            包含@Controller注解和@ResponseBody注解

            Controller注解声明类为控制器

            ResponseBody将返回值解析为JSON或者XML格式

            可以在controller类中响应一个实体对象或者集合

            eg:

            响应一个实体类对象

            @RequestMapping("/simpleParam")
            public String simpleParam( String name , Integer age){
            	User user = new User();
                user.setName();
                user.setAge();
                return user;
            }
            

            响应一个集合

            @RequestMapping("/list")
            public ArrayList<String> simpleParam( String name , Integer age){
            	ArrayList<String> list = new ArrayList<>();
                return list;
            }
            

            无论响应数据形式是什么,都应该以Result形式返回(统一规范)

            Result

            {
            	Integer code//1:成功 0:失败
            	String msg//响应码 描述字符串
            	Object data//使用Object类型可以接收任意数据
                static Result success(data){
                    //返回成功时的result
                }
                static Result error(msg){
                    //返回失败时的result
                }
            }
            

            综合案例(解析xml文件传递到前端页面)

            前端

            页面绑定js数据,数据绑定钩子函数请求的数据

            钩子函数:

            mounted() {
                   axios.get("/User").then(result=>(
                        this.tableData=result.data.data
                   ))
            },
            

            在组件加载阶段使用axios异步请求数据

            后端

            读取解析xml文件

            String file = 
            类名.class//获取字节码文件
            .getClassLoader()//获取类加载器
            .getResource()//获得资源
            .File()//文件路径
            XmlParserUtils.parse(file)对xml进行解析,得到一个对象集合
            

            调用result里的success方法

            返回成功对象

             return Result.success(list);
            

            分层解耦

            三层架构

            数据访问->逻辑访问->请求处理

            数据访问:

            负责业务数据的维护操作,包括增,删,改,查等操作

            逻辑处理:

            负责业务逻辑处理的代码

            请求处理,响应数据:

            负责,接收页面的请求,给页面响应数据

            按照三个组成部分,将代码分为三层

            Controller(控制层)

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

            Service(业务层)

            处理具体的业务逻辑,对数据进行处理

            Dao/Mapper(数据访问层/持久层)

            负责数据的访问操作,包含数据的增删改查操作

            分层解耦

            内聚:软件中各个功能模块内部的功能联系

            耦合:软件中各个层(模块)之间的依赖关联程度

            IOC/DI技术(inversion of control/dependency injection)

            IOC容器中管理的对象称为bean

            @Component(加在实现类上)

            @Primary有多个实现类对象时优先用被primary注解标注的

            把实现类对象直接放入IOC容器中(控制反转)

            @Autowired(加在声明对象语句上)

            把IOC容器中的对象拿出来(依赖注入)

            解决创建对象时产生的耦合

            UserService a = new UserService();
            //左侧通过实现接口实现多态进行解耦
            //右侧通过IOC/DI思想解决
            

            Bean的声明

            把对象交给IOC容器管理,需要以如下注解代替@Component

            Dao层->@Repository(自定义名字(默认类名小写))

            Service层->@Service(自定义名字(默认类名小写))

            Controller层->@Controller(自定义名字(默认类名小写))

            其他类对象->@Componet(自定义名字(默认类名小写))

            以上四大注解生效需要被组件扫描注解@ComponentScan扫描

            默认扫描范围为引导类所在包以及其子包

            Bean注入

            @Primary优先使用本类对象

            @Qualifier(“str”)选择名字为str的bean对象进行使用

            由SpringBoot框架提供

            @Resource(name=“str”)选择名字为str的bean对象使用

            由java提供

            rvice();
            //左侧通过实现接口实现多态进行解耦
            //右侧通过IOC/DI思想解决

            #### Bean的声明
            
            把对象交给IOC容器管理,需要以如下注解代替@Component
            
            Dao层->@Repository(自定义名字(默认类名小写))
            
            Service层->@Service(自定义名字(默认类名小写))
            
            Controller层->@Controller(自定义名字(默认类名小写))
            
            其他类对象->@Componet(自定义名字(默认类名小写))
            
            以上四大注解生效需要被组件扫描注解@ComponentScan扫描
            
            默认扫描范围为引导类所在包以及其子包
            
            
            #### Bean注入
            
            @Primary优先使用本类对象
            
            @Qualifier("str")选择名字为str的bean对象进行使用
            
            由SpringBoot框架提供
            
            @Resource(name="str")选择名字为str的bean对象使用
            
            由java提供

            总结 

            到此这篇关于java SpringBootWeb请求响应的文章就介绍到这了,更多相关java SpringBootWeb请求响应内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

            您可能感兴趣的文章:
            • spring boot如何使用AOP统一处理web请求
            • SpringBoot AOP统一处理Web请求日志的示例代码
            相关栏目:

            用户点评