springboot快书上手

Spring Boot 可以帮助我们非常快速的构建应用程序,简化开发,提高效率。

HTTP协议

请求协议 

 响应协议

请求响应-请求-简单参数-实体参数

        简单参数

                原始方式:在原始web程序中,获取请求参数,需要通过HttpServlet对象手动获取。

/**
    测试请求参数接收
 */

// 原始写法
@RestController
public class RequestController {
    @RequestMapping("/simple")
    public String simpleParams(HttpServletRequest Request){
        String name = Request.getParameter("name");
        String ageStr = Request.getParameter("age");

        Integer age = Integer.parseInt(ageStr);

        System.out.println(name + ":" + age);

        return "OK";
    }
}

                SpringBoot方式:参数名与形参变量名相同,定义形参即可接收参数。              

/**
    测试请求参数接收
 */

@RestController
public class RequestController {

    //SpringBoot写法
    @RequestMapping("/simple")
    public String simpleParams(String name, Integer age){

        System.out.println(name + ":" + age);

        return "OK";
    }
}

        如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成以映射

                注意:@RequestParam中的require属性默认为true, 代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。

/**
    测试请求参数接收
 */

@RestController
public class RequestController {

    //形参 与 请求参数不一样 @RequestParam
    @RequestMapping("/simple")
   public String simpleParams(@RequestParam(name = "name") String Username, Integer age){
        System.out.println(Username + ":" + age);
        return "OK";
   }
}

实体参数

        复杂实体对象:请求参数名与对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数


/**
    测试请求参数接收
 */

@RestController
public class RequestController {

   // 实体参数
    @RequestMapping("/simplePojo")
    public String simplePojoParams(User user){
        System.out.println(user.getName() + ":" + user.getAge());

        return "OK";
    }

}

请求响应-请求-数组集合参数

        数组参数

                请求参数名与形参数组名称形同且请求参数为多个,定义数组类型即可接收参数

/**
    测试请求参数接收
 */

@RestController
public class RequestController {

    // 数组集合参数
    @RequestMapping("/arrayParams")
    public String arrayParams(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }
}

        集合参数

                请求参数名与形参名称形同且请求参数为多个,@RequestParam绑定参数关系


/**
    测试请求参数接收
 */

@RestController
public class RequestController {

    // 集合参数
    @RequestMapping("/listParams")
    public String listParams(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }
}

请求响应-请求-日期,json,路径参数

        日期参数

                使用@DteTimeFormat注解完成日期参数格式转换


@RestController
public class RequestController {

    //日期参数
    @RequestMapping("/dateTime")
    public String dateTime(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "Ok";
    }
}

        json参数

                json数据键名与下形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识符

/**
    测试请求参数接收
 */

@RestController
public class RequestController {

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

  路径参数

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


/**
    测试请求参数接收
 */
@RestController
public class RequestController {


    //路径参数
    @RequestMapping("/path/{id}")
    public String path(@PathVariable Integer id){
        System.out.println(id);
        return "OK";
    }

    
        //路径参数 -- 多个参数
    @RequestMapping("/path/{id}/{name}")
    public String pathParams2(@PathVariable Integer id, @PathVariable String name){
        System.out.println(id);
        System.out.println(name);
        return "OK";
    }
}

统一响应结果 

 Result.class

package com.itheima.springbootwebreqresp.Pojo;

/*
    统一响应结果封装
*/

public class Result {
    //响应码, 1,代表成功;0代表失败
    private Integer code;
    //提示信息
    private String msg;
    //返回的数据
    private Object date;

    public Result() {
    }

    public Result(Integer code, String msg, Object date) {
        this.code = code;
        this.msg = msg;
        this.date = date;
    }

    public Integer getCode() {
        return code;
    }

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

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getDate() {
        return date;
    }

    public void setDate(Object date) {
        this.date = date;
    }

    public static Result success(Object data){
        return new Result(1, "success", data);
    }

    public static Result success(){
        return new Result(1, "success", null);
    }

    public static Result error(){
        return new Result(0, "error", null);
    }

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

 响应代码



@RestController
public class responseController {

    //改造

    //String
    @RequestMapping("/holle")
    public Result hello(){
        System.out.println("Holle World");
        return Result.success("Holle World");
    }

    //对象
    @RequestMapping("/getAddress")
    public Result getAddress(){
        Address address = new Address();
        address.setProvince("广州");
        address.setCity("广东");
        return Result.success(address);
    }

    // 集合
    @RequestMapping("/listAddress")
    public Result listAddress() {
        List<Address> list = new ArrayList<>();

        Address address = new Address();
        address.setProvince("广州");
        address.setCity("深圳");

        Address address1 = new Address();
        address1.setProvince("江西");
        address1.setCity("南昌");

        list.add(address);
        list.add(address1);
        return Result.success(list);
    }

}

 分层解耦 - 三层架构

        三层架构

 分成解耦

        IOC & DI

                1.Service层 及 Dao层的实现类,交给IOC容器管理。

@Component //将当前类交给IOC容器管理,成为IOC容器中的bean

                 2.Controller及Service注入运行时,依赖的对象

@Autowired //运行时,IOC如容器会提供该类型的bean对象,并赋值给该变量 - 依赖注入

                 3.运行测试

        IOC详解

         组件扫描

               1. 前面申明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描

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

@ComponentScan("dao", "com.itheima")  

        DI详解

                Beean注解

                        @Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误:

通过以下几种方案来解决:

       @primary

@Primary
@Service //将当前类交给IOC容器管理,成为IOC容器中的bean
public class EmpServiceA implements EmpService {
    
}

        @Qualifier

@RestController
public class EmpController {
    //调用service
    @Qualifier("empServiceB")
    @Autowired //运行时,IOC如容器会提供该类型的bean对象,并赋值给该变量 - 依赖注入
    private EmpService empService;
}

        @Resource (jdk)

@RestController
public class EmpController {
    //调用service

    @Resource(name = "empServiceB")
    private EmpService empService;
}

         总结: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值