SpringBoot注解

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 打包时跳过单元测试

    }
}

你可能感兴趣的:(SpringBoot注解)