spring boot笔记(不断更新)

Posted 小蜗牛爱远行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot笔记(不断更新)相关的知识,希望对你有一定的参考价值。

  • spring

    • @Autowired //消除 set ,get方法

    • @ApiOperation //swagger里的 com.wordnik.swagger.annotations.ApiOperation

      • @ApiOperation@ApiParam为添加的API相关注解,个参数说明如下:
        @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”);其他参数可参考源码;
        @ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”)
    • @Deprecated表示方法已经过时,方法上有横线,使用时会有警告

    • @SuppressWarnings(value={“unchecked”, “deprecation”})表示关闭一些警告信息(通知java编译器忽略特定的编译警告)用来抑制编译时的警告信息。

    • @EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PreAuthorize可以使用

      • @PreAuthorize可以用来控制一个方法是否能够被调用。
      • @在controller层方法中添加权限配置(符合条件得才可以调用这个方法)
      • 示例:
        • @PreAuthorize(value = "#oauth2.hasAnyScope('A','B','C','D')")//添加机构编码权限,判断该机构是否有权限调用
          @PreAuthorize(value="isAuthenticated()")//添加登录权限判断,登录才可以调用
    • @RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了。不能返回jsp,html页面,视图解析器无法解析jsp,html页面

      • @RestController
        @RequestMapping("******")
        @Api(tags = "******")
        public class ****** {}
        
      • @Controller
        //处理文件上传
        @RequestMapping(value="/******", method = RequestMethod.POST)
        public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file,
        HttpServletRequest request) {
        System.out.println("调用文件上传方法");
        String contentType = file.getContentType();
        String fileName = file.getOriginalFilename();
        
    • @Slf4j:如果不想每次都写private final Logger logger = LoggerFactory.getLogger(当前类名.class); 可以用注解@Slf4j;

    • @Service用于标注业务层组件

    • @Repository用于标注数据访问组件,即DAO组件

    • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

    • 接收请求路径中占位符的值

      @RequestMapping("show5/{id}/{name}")
      public ModelAndView test5(@PathVariable("id") Long ids, @PathVariable("name") String names){}
      public ModelAndView test5(@PathVariable Long id, @PathVariable String name){}
      
    • @RequestParam第一种情况参数都使用@RequestParam注入,那么地址的拼写是不需要加参数的。

      • @RequestMapping(value = {"/findDictionarybyTypeId"},method = RequestMethod.GET)
        @ResponseBody
        public ItooResult findDictionarybyTypeId(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false, defaultValue = "") String typeId, @RequestParam(required = false, defaultValue = "") String dictionaryInfo) 
        
        

      @PathVariable:****地址的拼写是需要加参数值****

      • @RequestMapping(value = {"/exportToExcel/{typeId}"},method = RequestMethod.GET)
        @ResponseBody
        public ItooResult exportToExcel(HttpServletRequest request,HttpServletResponse response, @PathVariable String typeId, @RequestParam(required = false, defaultValue = "") String dictionaryInfo) 
        
        
    • @EnableTransactionManagement注解(开启事务支持,相当于XML中的<tx.annotation-driven/>配置方式),然后访问Service方法上标注@Transactional注解即可。如果将@Transactional注解注在Service类级别上,当前Service类的所有方法都将被事务增强(不建议)。

    • ###swagger注释API

      作用范围API使用位置
      对象属性@ApiModelProperty用在出入参数对象的字段上
      协议集描述@Api用于controller类上
      协议描述@ApiOperation用在controller的方法上
      Response集@ApiResponses用在controller的方法上
      Response@ApiResponse用在 @ApiResponses里边
      非对象参数集@ApiImplicitParams用在controller的方法上
      非对象参数描述@ApiImplicitParam用在@ApiImplicitParams的方法里边
      描述返回对象的意义@ApiModel用在返回对象类上
    • @ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改

      • value–字段说明
      • name–重写属性名字
      • dataType–重写属性类型
      • required–是否必填
      • example–举例说明
      • hidden–隐藏
    • 常见注解

      • @Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
      • @AllArgsConstructor : 注在类上,提供类的全参构造
      • @NoArgsConstructor : 注在类上,提供类的无参构造
      • @Setter : 注在属性上,提供 set 方法
      • @Getter : 注在属性上,提供 get 方法
      • @EqualsAndHashCode : 注在类上,提供对应的 equals 和 hashCode 方法
      • @Log4j/@Slf4j : 注在类上,提供对应的 Logger 对象,变量名为 log
  • 它与java中的泛型有关。如果我提到ArrayList<String>这意味着我只能向该ArrayList添加字符串类型对象。

    Java中泛型的两个主要好处是:

    1. 减少程序中的强制转换数,从而减少程序中潜在的错误数。
    2. 提高代码清晰度
  • throws Exception放在方法后边,是throws Exception表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception) ,而且被调用处必须处理。

  • 集合判断

    • CollectionUtils.isEmpty()
      • CollectionUtils.isEmpty(null): true
      • CollectionUtils.isEmpty(new ArrayList()): true
      • CollectionUtils.isEmpty({a,b}): false
    • CollectionUtils.isNotEmpty()
      • CollectionUtils.isNotEmpty(null): false
      • CollectionUtils.isNotEmpty(new ArrayList()): false
      • CollectionUtils.isNotEmpty({a,b}): true
  • toPlainString():返回不带指数字段的此 BigDecimal 的字符串表示形式。通俗来讲就是直接显示,不用科学计数法表示。

    import java.math.BigDecimal;
    public class BigDecimalDemo {
        public static void main(String[] args) {
            BigDecimal bg = new BigDecimal("1E11");
            System.out.println(bg.toEngineeringString());
            System.out.println(bg.toPlainString());
            System.out.println(bg.toString());
        }
    }
    //100E+9
    //100000000000
    //1E+11
    
  • concat(String s)字符串拼接

  • File.separator是系统默认的文件分割符号,屏蔽了这些系统的区别

  • 分页请求

    //PageUtils自定义类
    //PageUtils.build(Integer pageNum, Integer pageSize)如果传入分页参数为空,设置默认值(1,10)
    //PageUtils.validCheck(Integer pageNum, Integer pageSize)检查分页参数,如果pageSize为空或者pageNum为空或者参数值小于1,抛出异常:“分页参数错误”
    Page<ModelInfoRes> page = PageUtils.build(req.getPageNum(), req.getPageSize());
    
    
  • List<String> collect = staff.stream().map(x -> x.getName()).collect(Collectors.toList());
    ``System.out.println(collect); ``//[mkyong, jack, lawrence]
    
  • 时间格式化:.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))

  • UPDATE cdr_out set policy_number = CONCAT('["',policy_number,'"]')

  • org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值

  • 服务之间的调用-----Feign

    • 启动类加入:@EnableFeignClients注解开启对 Feign Client 扫描加载处理。
  • 将从redis中获得的字符串直接转换成对象:
    List interactiveRecordList = JSON.parseArray(JSON.toJSONString(interactiveRecordListTmp), InteractiveRecord.class);

  • Serializable是一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。

  • 查询-日期

    //日期获取
    LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    QueryWrapper<RecordOutDto> wrapper = new QueryWrapper<>();
    wrapper.eq("transfer_status", 1).between("create_time", date, date.plusDays(1));
    
  • xml中resultType="",sql 中as的值,定义的实体中必须存在,才能调用实体类,set几个值,里面有几个值。

  • 日志设置:
    private static Logger logger = LoggerFactory.getLogger(ThreadManager.class);

以上是关于spring boot笔记(不断更新)的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:thymeleaf 没有正确渲染片段

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

SpringBoot笔记

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式