https://www.cnblogs.com/tanwei81/p/6814022.html 注解大全。
注解:
@RestController注解
@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器。
@RestController是放在example类上的第一个注解,要结合着@RequestMapping(value="/hello",method=RequestMethod.GET) 注解使用。
@RequestMapping注解
@RestController
@RequestMapping(value = "/testtwo") //写到类前面,controller类中的每个方法请求时url都要加上/testtwo
public class HelloController {
// //使用value注解把cupSize的参数值从yaml文件中获取过来,然后赋值给cupSize参数
// @Value("${cupSize}")
// private String cupSize;
//
// @Value("${age}")
// private String age;
//
// //获取组合参数content的值赋值给content
// @Value("${content}")
// private String content;
//使用@Autowired自动注入函数
@Autowired
private GirlProperties girlProperties;
//请求方式注解,value是指请求路径,method是请求方法
//value = {"/hello","/hi"} 是指请求url时用/hello或者/hi都可以
@RequestMapping(value = {"/hello","/hi"},method = RequestMethod.GET)
public String say(){
// return "hello Spring Boot hahha";
//// return cupSize+" "+age;
// return content;
return girlProperties.getCupSize()+girlProperties.getAge();
}
//value = "/hello/{idnum}" 输入url时带上参数 如/hello/111
//使用@PathVariable("idnum") Integer id ,从浏览器输入时获取参数值,Integer id是自定义的参数,
@RequestMapping(value = "/hello/{idnum}",method =RequestMethod.GET)
public String saytwo(@PathVariable("idnum") Integer id){
return "输入的id是:"+id;
}
//可以把参数值写到url的中间
@RequestMapping(value = "/{idnum}/hello",method =RequestMethod.GET)
public String saythree(@PathVariable("idnum") Integer id){
return "输入的id是:"+id;
}
//使用@RequestParam("id"),在url后面以问号的方式携带参数,比如/hellosayfour?id=666,获取666的值并返回到浏览器中
@RequestMapping(value = "/hellosayfour",method =RequestMethod.GET)
public String sayfour(@RequestParam("id") Integer myid){
return "id:"+myid;
}
//@RequestParam(value="id",required = false,defaultValue = "5")是指没有输入值时取默认的值,默认值为5
@RequestMapping(value = "/hellosayfive",method =RequestMethod.GET)
public String sayfive(@RequestParam(value="id",required = false,defaultValue = "5") Integer myid){
return "id:"+myid;
}
//@RequestMapping注解可以用@GetMapping(value = "/hellosaysix")代替,post注解可以用@PostMapping
@GetMapping(value = "/hellosaysix")
public String saysix(@RequestParam(value="id",required = false,defaultValue = "6") Integer myid){
return "id:"+myid;
}
}
@Value("${cupSize}") //获取参数值
//使用value注解把cupSize的参数值从yaml文件中获取过来,然后赋值给cupSize参数
@Value("${cupSize}")
private String cupSize;
@Autowired注解 通过@Autowired把接口或者类自动注入到SpringBoot容器中
@Component注解在程序启动后执行一些基础任务
@ConfigurationProperties(prefix = "girl")//从配置文件中获取前缀是girl的配置信息
@Autowired、@Component、@ConfigurationProperties(prefix = "girl")要配合着使用
@Valid 校验某个值,要配合BindingResult bindingResult方法使用
在domain实体类的get方法前加@Min注解
//@Min注解是给属性值一个最小值,如果小于最小值给出一个message提示
@Min(value = 18,message = "未成年少女不可入内")
public Integer getAge() {
return age;
}
在控制类中加@Valid校验注解
//定义一个post方法,设置两个参数,与数据库中参数值要对应
@RequestMapping(value = "/addgirl",method = RequestMethod.POST)
public Girl addgirl(@Valid Girl girl, BindingResult bindingResult){
//不写获取参数的@RequestParma注解,直接写一个对象,通过对象的get方法获取参数值。如果属性值很多就写入girl实体类中就行。
//@Valid注解 验证age小于18时会报错,接收并打印错误,同时返回null
if(bindingResult.hasErrors()){
System.out.println(bindingResult.getFieldError().getDefaultMessage());
return null;
}
//设置cupsize和age的值
girl.setCupSize(girl.getCupSize());
girl.setAge(girl.getAge());
//调girlRep接口的save方法,往数据库中插入值,并同时返回插入的值信息
return girlRep.save(girl);
}
@Pointcut 注解,切入点注解,从哪个类开始切入使用AOP统一处理技术,
@Before和@After注解中都写入("log()")示例代码如下:
//为了使代码更简单,可以这样写,使用@Pointcut注解
// @Before("execution(public * com.imooc.controller.GirlController.*(..))")
@Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
public void log(){
}
//@Before注解可以这样写,调用方法之前先调用log()方法
@Before("log()")
public void doBefore(){
System.out.println("执行方法前,使用Aop统一处理日志");
}
//在方法执行完后打印日志
// @After("execution(public * com.imooc.controller.GirlController.*(..))")
@After("log()")
public void doAfter(){
System.out.println("执行方法后,使用Aop统一处理日志");
}
@AfterReturning注解
//获取接口返回的内容
//使用@AfterReturning注解,获取目标方法返回的参数,目标方法返回的是object对象
@AfterReturning(returning = "object",pointcut = "log()")
public void doAfterReturining(Object object){
logger.info("returning={}",object);
}
@Entity注解、@Table(name = "Girls")
//@Entity:@Table(name="") 表明这是一个实体类,一般和jpa配合着使用,如果实体类名称和数据库名称一致,@Table注解可以省略
//此注解代表要生成一个Girls数据表
@Entity
@Table(name = "Girls")
public class Girl {
@Service注解代表是service层的意思
/*
service层写业务逻辑
*/
@Service
public class GirlService {
//通过@Autowired注解把GirlRep接口注入Spirng容器中,同时带入Girl实体类
@Autowired
public GirlRep girlRep;
//在service层添加@Transactional注解可以有效控制事务
@Transactional
public void interTwo(){
Girl girlone=new Girl();
girlone.setAge(33);
girlone.setCupSize("BBBBBBBBBB");
Girl girltwo=new Girl();
girltwo.setAge(34);
girltwo.setCupSize("D");
girlRep.save(girlone);
girlRep.save(girltwo);
}
}
//在service层添加@Transactional注解可以有效控制事务
//@ControllerAdvice注解,包含@component组件,可以被扫描到统一捕获和处理异常
@ExceptionHandler(Exception.class)注解:用在方法上面表示遇到这个异常就执行以下方法
示例代码如下:
package com.imooc.handle;
/*
此类主要用来接收和处理异常
*/
import com.imooc.domain.Result;
import com.imooc.utils.ResultUtil;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
//@ControllerAdvice注解,包含@component组件,可以被扫描到统一捕获和处理异常
@ControllerAdvice
public class ExceptionHandle {
//@ExceptionHandler(Exception.class)注解:用在方法上面表示遇到这个异常就执行以下方法
//@ResponseBody因为处理的是返回结果的异常,所以加一个@ResponseBody
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result Handle(Exception e){
//返回统一日志处理类中的error方法,错误码是100,错误信息是e.getMessage(),获取异常信息
//ResultUtil.error方法返回的类型就是Result类型,所以Handle方法返回的类型也是Result
return ResultUtil.error(100,e.getMessage());
}
}
@RunWith注解是指测试运行器,告诉程序是什么环境下的测试,目前参数是SpringRunner是指在Spring环境下的测试
**@SpringBootTest **启动整个SpringBoot的工程
package com.imooc;
import com.imooc.domain.Girl;
import com.imooc.service.GirlService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
/*
测试GirlService类
*/
//@RunWith注解是指测试运行器,告诉程序是什么环境下的测试,目前参数是SpringRunner是指在Spring环境下的测试
//@SpringBootTest 启动整个SpringBoot的工程
@RunWith(SpringRunner.class)
@SpringBootTest
public class GirlServiceTest {
//注入GirlService类,下面会使用该类中的方法
@Autowired
GirlService girlService;
@Test
public void findoneTest(){
Girl girl=girlService.findone(8);
//断言,判断age值是否与预期的值相等
Assert.assertEquals(new Integer(31),girl.getAge());
}
}
@AutoConfigureMockMvc //该注解是指使用mockmvc测试
package com.imooc.controller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc //该注解是指使用mockmvc测试
public class GirlControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getgirlslist() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/getgirlslist")).
andExpect(MockMvcResultMatchers.status().isOk()).
andExpect(MockMvcResultMatchers.content().string("777"));
//andExpect方法中有很多判断的方法
//在命令行中输入:mvn clean package 打包
//mvn clean package -Dmaven.test.skip=true 打包时跳过单元测试
}
}