请求响应

一、简单参数的接受

1、原始方法获取参数(了解即可)

Controller方法形参中声明HttpServerRequest对象

调用对象的getParameter(参数名)

    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
        //获取请求参数
        String name = request.getParameter("name");
        String agestr = request.getParameter("age");
        int age = Integer.parseInt(agestr);
        System.out.println(name+":"+age);
        return "ok";
    }

2、SpringBoot中接受简单参数

请求参数名与方法形参变量名相同

自动进行类型转换

@RequestMapping("/simpleParam")
    public String simpleParam(String usename, Integer age){

        System.out.println(usename+":"+age);
        return "ok";
    }

url:http://localhost:8080/simpleParam?name=Tom&age=10

3、@RequestParam注解

方法形参名称与请求参数名称不匹配时,通过该注释完成映射

该注释的required属性默认是true,代表请求参数必须传递(不对,我实验了,返回的是 null:10)

//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String usename, Integer age){

        System.out.println(usename+":"+age);
        return "ok";
    }

二、实体参数的接收:请求参数名形参对象属性名相同,定义POJO接收即可

//复杂实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OK";
    }

其中User对象、Address对象如下: 

public class User {
    private String name;
    private Integer age;
    private Address address;
    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;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}
public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

URL:http://localhost:8080/complexPojo?name=T&age=1&address.province=北京&address.city=北京

三、数组集合参数

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

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

 URL:http://localhost:8080/arrayPojo?hobby=game&hobby=java&hobby=sing

输出结果为:

 

集合参数:

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

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

调试URL:http://localhost:8080/listPojo?hobby=game&hobby=java&hobby=sing

输出结果为:

四、日期参数

使用@DataTimeFormat完成日期参数格式转换

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

调试URL:http://localhost:8080/dateParam?updateTime=2024-04-17 21:07:06

输出结果为:

五、JSON参数

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

调试设置:

//JSON参数
    @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";
    }

【注】:使用{id}表示一个动态的数

调试设置:

输出结果为:

当传递多个路径参数时:

输出结果为:

七、分层解耦

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

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

dao:数据访问层,负责数据访问操作,包括数据的增删改查。

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

耦合:衡量软件中各个层、模块间的依赖、关联程度。

软件设计原则:高内聚低耦合

解耦合:1、需要把service对象交给容器管理(控制反转)  2、容器要为程序提供它所依赖的资源(依赖注入)

控制反转:Inversion Of Control,简称IOC。对象的创建控制权由陈虚谷自身转移到外部(容器)。

依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源。

Bean对象:在IOC容器中创建、管理的对象。称之为bean。

1、IOC控制反转

bean的声明:要把某个对象交给IOC容器管理,需要在对应的类上加上如下注释:

声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。

使用以上四个注释都可以声明bean,但在springboot集成web开发中,声明控制器bean只能用@Controller(而且@RestController包含了@Controller+@ResponseBody)

bean组件扫描

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

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

2、DI依赖注入

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

解决方案:

(1)@Primary

想让谁生效就在类上直接加上此注释

(2)@Qualifier

@Autowird+@Qualifier(”bean的名称“)

(3)@Resource

@Resource(name=”bean的名称“)【bean的名称默认为类名首字母小写】

【@Resource与@Autowired区别】

@Autowired是spring框架提供的注释,耳@Resource是JDK以供的注解

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

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值