基础

控制器请求响应注解

@RequestMapping("/path")

@Controller注解设置控制器

@RestController注解设置返回json统一响应结果 返回值设置为目标类型,如

1
2
3
4
5
6
@RestController
class java {
    public Result test(Result result) {
        result result;
    }
}

参数传递

简单参数传递

1
2
3
4
5
class test {
    public String test(String a) {
        return a;
    }
}

直接在path中添加键值对a=?保证请求参数名与controller参数名称保持一致即可

如果要更改键值对对应参数,使用@RequestParam注解即可

1
2
3
4
5
class java {
    public String test(@RequestParam(name = "change", requerd = false) String a) {
        return a;
    }
}

其中,requerd确定参数是否必须,若为true则参数为必须赋值

pojo作为参数传递

在参数中将pojo作为参数

1
2
3
4
5
class java {
    public String test(Pojo pojo) {
        return pojo;
    }
}

path中分别传入user的多个成员变量

若pojo对象存在嵌套关系,如pojo1中包含pojo2

则传入的path格式应该是

1
a=?&b=?&pojo2.a=?&pojo2.b=?

数组作为类型传递

参数定义为数组类型

1
2
3
4
5
class java {
    public String test(String[] a) {
        return a;
    }
}

使用path传输参数时,格式为

1
a=x&a=y&a=z

集合作为参数类型

参数首先定义为集合类型,并在前方加入@RequsstParam注解,如

1
2
3
4
5
class java {
    public String test(@RequsetParam List<String> a) {
        return a;
    }
}

使用path传入参数时,与数组格式相同

1
a=x&a=y&a=z

Json获取参数变量

使用@RequsstBody接收json格式请求,如

1
2
3
4
5
class java {
    public String test(@RequsetBody Pojo pojo) {
        return pojo;
    }
}

json基本格式

1
2
3
4
5
6
7
8
{
  "key1": "value1",
  "key1": "value2",
  "pojo2": {
    "key1": "value1",
    "key2": "value1"
  }
}

路径参数获取变量

使用@PathVariable注解来定义路径参数,如

1
2
3
4
5
6
class java {
    @RequsetMapping("/path/{a}/{b}")
    public String test(@PathVariable String a, String b) {
        return a + b;
    }
}

path格式

  1. @RequsetMappingpath格式
1
/path/{a}/{b}
  1. url传入格式
1
/path/1/2

IOC&DI

1.控制反转

基础内容

使用@Component注解将bean对象交给IOC容器管理

使用@Autowired注解注入bean对象

@Component注解衍生注解

@Component标注bean对象的基本注解
@Controller标注在控制器上
@Service标注在业务层上
@Repository标注在数据访问层上

代码演示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//接口实现
interface Bean {
    void test();
}

//bean对象实现接口
@Component
class bean implements Bean {
    @Override
    public void test() {
        System.out.println("test");
    }
}

//控制器自动装配Bean对象
@RestController
class java {
    @Autowired
    private Bean bean;

    @RequsetMapping("/test")
    public String main() {
        bean.test();
        return ok;
    }
}

@Component注解的注入对象选择

若存在多个相同类型的bean对象,使用value属性进行对象选择,如

@Component(value = "beanA")

值为对象名称首字母小写,value属性可省略

若对象不在同一个包中,需要用@ComPonentScan注解进行扫描,使用方法为

@ComponentScan("包1","包2")

若需要手动扫描,需要填写全部的包名

对象优先级设置

注解使用方法
@Primary直接加在对象类声明前
@Qualifier@Autowired注解后使用,格式为@Qualifier(”对象类“)对象类为对象名首字母小写
@Resource在注入处替换掉@Autowired@Resource(name = "对象类")对象类为对象名首字母小写

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
interface Bean {
    void test();
}

//第一种方法直接添加`@Primary`
@Primary
@Component
class bean1 implements Bean {
    @Override
    public void test() {
        System.out.println("test1");
    }
}

@Component
class bean2 implements Bean {
    @Override
    public void test() {
        System.out.println("test2");
    }
}

@Controller
class java {
    @Autowired
//第二种方法直接在`@Autowired`后加`@Qualifier("对象类")`
    @Qualifier("bean1")

//第三种方法用@Resource(name = "对象类")替换@AutoWried
    @Resource(name = "bean2")
    private Bean bean;

    public void main() {
        bean.test();
    }
}