控制器请求响应注解#
@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
传输参数时,格式为
集合作为参数类型#
参数首先定义为集合类型,并在前方加入@RequsstParam
注解,如
1
2
3
4
5
| class java {
public String test(@RequsetParam List<String> a) {
return a;
}
}
|
使用path
传入参数时,与数组格式相同
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
格式
@RequsetMapping
的path
格式
url
传入格式
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();
}
}
|