记录一些工作中遇到的注解方便以后查找,2017年12月19日
前言
记录一些工作中遇到的注解方便以后查找,2017年12月19日
@RestController
@RestController
4.0之前的版本,SpringMVC的组件都使用@Controller来标识当前类是一个控制器servlet,现在@RestController就相当于标识当前类为Controller,支持返回xml和json
@RequestMapping
@RequestMapping(value="/users")
在Controller层上配置1
2
3
4
(value = "/user") // 通过这里配置使下面的映射都在/user下
public class UserController {
}@RequestMapping(value=”/“, method=RequestMethod.GET)
这里指定了访问的类型GET,相似的还有
| Method | 请求类型 |
|---|---|
| method=RequestMethod.GET | GET请求 |
| method=RequestMethod.POST | POST请求 |
| method=RequestMethod.PUT | PUT请求 |
| method=RequestMethod.DELETE | DELETE请求 |
可以用这个方式实现RESTful API
RESTful API设计思想大概:
| 请求类型 | URL | 功能说明 |
|---|---|---|
| GET | /users | 查询用户列表 |
| POST | /users | 创建一个用户 |
| GET | /users?id= | 根据ID查询一个用户 |
| PUT | /users?id= | 根据ID更新一个用户 |
| DELETE | /users?id= | 根据ID删除一个用户 |
示例: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
37
38
39
40
41
42
43
44
45
46
47
(value="/users") // 通过这里配置使下面的映射都在/users下
public class UserController {
(value="/", method=RequestMethod.GET)
public List<User> getUserList() {
// 处理"/users/"的GET请求,用来获取用户列表
// 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
List<User> r = new ArrayList<User>(users.values());
return r;
}
(value="/", method=RequestMethod.POST)
public String postUser(@ModelAttribute User user) {
// 处理"/users/"的POST请求,用来创建User
// 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数
users.put(user.getId(), user);
return "success";
}
(value="/{id}", method=RequestMethod.GET)
public User getUser(@PathVariable Long id) {
// 处理"/users/{id}"的GET请求,用来获取url中id值的User信息
// url中的id可通过@PathVariable绑定到函数的参数中
return users.get(id);
}
(value="/{id}", method=RequestMethod.PUT)
public String putUser(@PathVariable Long id, @ModelAttribute User user) {
// 处理"/users/{id}"的PUT请求,用来更新User信息
User u = users.get(id);
u.setName(user.getName());
u.setAge(user.getAge());
users.put(id, u);
return "success";
}
(value="/{id}", method=RequestMethod.DELETE)
public String deleteUser(@PathVariable Long id) {
// 处理"/users/{id}"的DELETE请求,用来删除User
users.remove(id);
return "success";
}
}
@PathVariable
@PathVariable
作用:映射 URL 绑定的占位符
示例:1
2
3
4
5
6
7//@PathVariable可以用来映射URL中的占位符到目标方法的参数中
("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id)
{
System.out.println("testPathVariable:"+id);
return SUCCESS;
}
@ModelAttribute
- @ModelAttribute
1
2
3
4(value="/", method=RequestMethod.POST)
public String postUser(@ModelAttribute User user) {
// 处理POST请求,用来创建User
}
@RequestParam
@RequestParam
一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取
示例1
2
3
4
5
6
7
8
9
10("testRequestParam")
public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) {
System.out.println(inputStr);
int inputInt = Integer.valueOf(request.getParameter("inputInt"));
System.out.println(inputInt);
// ......省略
return "index";
}
@ControllerAdvice
@ControllerAdvice
作用于 整个 Spring 工程. ControllerAdvice 注解定义了一个全局的异常处理器,详情在异常处理的那一篇博客里面@ControllerAdvice呢也有个相似的@RestControllerAdvice
@ExceptionHandler
捕获异常,以及异常的子类,详细用法在在异常处理的那一篇博客里面
@RunWith
@RunWith
使用RunWith注解改变JUnit的默认执行类,并实现自已的Listener在平时的单元测试,如果不使用RunWith注解,那么JUnit将会采用默认的执行类Suite执行,如下类:1
2
3
4
5
6
7
8public class SimpleJunitTest {
public void testSayHi() {
System.out.println("Hi Junit.");
}
}@RunWith(SpringJUnit4ClassRunner.class),这里就指定的是SpringJUnit4ClassRunner.class,如下类:
1 | (SpringJUnit4ClassRunner.class) |
@SpringApplicationConfiguration
@SpringApplicationConfiguration
废弃
@SpringBootTest
@SpringBootTest@SpringBootTest替代了@SpringApplicationConfiguration
具体用法规定启动容器?如下类:1
2
3
4
5
6
7
8
9
10
11
12
13
14(SpringJUnit4ClassRunner.class)
(classes = DemoApplication.class)
public class RedisDemo {
public void test(){
//测试方法
}
public void testGet(){
//测试方法
}
}
@DataJpaTest
@DataJpaTest
目前我已知的可用在测试JPA中(毕竟我还是个菜鸟)@DataJpaTest注解它只扫描@Entity和装配 Spring Data JPA 存储库,其他常规的@Component(包括@Service、@Repository等)Bean 则不会被加载到 Spring 测试环境上下文。如下类:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18(SpringRunner.class)
public class UserRepositoryInMemoryTest {
private UserRepository userRepository;
public void testSave() {
User user = new User();
user.setName("fanlychie");
userRepository.save(user);
System.out.println("====================================");
System.out.println(userRepository.findAll());
System.out.println("====================================");
}
}
@Entity,@Table,@Id,@GeneratedValue,@Column
@Entity,@Entity,@Table,@Id,@GeneratedValue,@Column- 这里把这几个注解一起记录,因为一般都是在一起用的
具体使用的方法如下类(结合JPA使用):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//表明为实体类
(name="user") //指定对应的表
public class SystemUser implements Serializable{
//表明主键
(strategy = GenerationType.IDENTITY) //表明id为自增
(name = "id") //在表中对应的字段
private Integer id;
(name="user_name")
private String name;
(name="user_password")
private String password;
//....省略Geter,Seter
}
@Mapper,@Results,@Result,@Select,@Update,@Delete,@Insert,@Options
@Mapper将UserDao声明为一个Mapper接口@Results字段与数据库的映射列表@Result进行详细的映射,其中property是User类的属性名,colomn是数据库表的字段名@Select写入查询@Update写入更新语句@Delete写入删除语句@Insert写入插入语句@Options设置主键,其中useGeneratedKeys是使用主键,keyProperty实体类中主键的名字,keyColumn数据
详细的用法可以参照….
@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,@PatchMapping
- 这些注解是spring4.3引进的,自己感觉更便于开发RESTful风格的接口
- 拿 以@GetMapping为例,Spring官方文档说:
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。 - 其它的同理
@SpringBootApplication
@SpringBootApplication- 在springboot的启动类上,具体如下:
1 | import org.springframework.boot.SpringApplication; |
@SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置功能。实际
上,@SpringBootApplication将三个有用的注解组合在了一起- Spring的
@Configuration:标明该类使用Spring基于Java的配置。 - Spring的
@ComponentScan:启用组件扫描,这样你写的Web控制器类和其他组件才能被
自动发现并注册为Spring应用程序上下文里的Bean - Spring Boot 的
@EnableAutoConfiguration: 这 个 不 起 眼 的 小 注 解 也 可 以 称 为@Abracadabra
- Spring的
@SpringApplicationConfiguration
- @SpringApplicationConfiguration
1 | @SpringApplicationConfiguration(classes = ReadingListApplication.class) |
通过 Spring Boot加载上下文