记录一些工作中遇到的注解方便以后查找,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
"/user") // 通过这里配置使下面的映射都在/user下 (value =
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
"/users") // 通过这里配置使下面的映射都在/users下 (value=
public class UserController {
"/", method=RequestMethod.GET) (value=
public List<User> getUserList() {
// 处理"/users/"的GET请求,用来获取用户列表
// 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
List<User> r = new ArrayList<User>(users.values());
return r;
}
"/", method=RequestMethod.POST) (value=
public String postUser(@ModelAttribute User user) {
// 处理"/users/"的POST请求,用来创建User
// 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数
users.put(user.getId(), user);
return "success";
}
"/{id}", method=RequestMethod.GET) (value=
public User getUser(@PathVariable Long id) {
// 处理"/users/{id}"的GET请求,用来获取url中id值的User信息
// url中的id可通过@PathVariable绑定到函数的参数中
return users.get(id);
}
"/{id}", method=RequestMethod.PUT) (value=
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";
}
"/{id}", method=RequestMethod.DELETE) (value=
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"/", method=RequestMethod.POST) (value=
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//表明为实体类
"user") //指定对应的表 (name=
public class SystemUser implements Serializable{
//表明主键
//表明id为自增 (strategy = GenerationType.IDENTITY)
"id") //在表中对应的字段 (name =
private Integer id;
"user_name") (name=
private String name;
"user_password") (name=
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加载上下文