java SpringBoot 常用注解 比较方法 排序 项目笔记
Posted 小蜗牛爱远行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java SpringBoot 常用注解 比较方法 排序 项目笔记相关的知识,希望对你有一定的参考价值。
-
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("modelintentioncorpus") @Api(tags = "模型意图语料") public class ModelIntentionCorpusController
-
@Controller //处理文件上传 @RequestMapping(value="/testuploadimg", 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类的所有方法都将被事务增强(不建议)。 -
@PostContruct
首先这个注解是由Java提供的,它用来修饰一个非静态的void方法。它会在服务器加载Servlet的时候运行,并且只运行一次。执行 顺序:Constructor >> @Autowired >> @PostConstruct
-
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–隐藏
-
@interface
注解类,用来自定义注解类,配合下面两个注解使用-
@Retention(RetentionPolicy.RUNTIME)
public enum RetentionPolicy SOURCE, // 编译器处理完Annotation后不存储在class中 CLASS, // 编译器把Annotation存储在class中,这是默认值 RUNTIME // 编译器把Annotation存储在class中,可以由虚拟机读取,反射需要
-
@Target
:注解的作用目标@Target(ElementType.TYPE) //接口、类、枚举、注解 @Target(ElementType.FIELD) //字段、枚举的常量 @Target(ElementType.METHOD) //方法 @Target(ElementType.PARAMETER) //方法参数 @Target(ElementType.CONSTRUCTOR) //构造函数 @Target(ElementType.LOCAL_VARIABLE)//局部变量 @Target(ElementType.ANNOTATION_TYPE)//注解 @Target(ElementType.PACKAGE) ///包
-
-
常见注解
- @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中泛型的两个主要好处是:
- 减少程序中的强制转换数,从而减少程序中潜在的错误数。
- 提高代码清晰度
-
throws Exception
放在方法后边,是throws Exception
表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception
) ,而且被调用处必须处理。 -
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 扫描加载处理。 - 在当前应用中配置:
- 引用其他服务的FeignApi要在pom文件中做dependency
- 编写FeignApi
- 编写熔断炉
- 在应用服务中编写rpc,写对应的AppFeignClient
- 启动类加入:
-
将从redis中获得的字符串直接转换成对象:
List<InteractiveRecord> 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)); //数据库修改时间自动更新 //update_time 数据库字段设置为:根据当前时间戳更新,CURRENT_TIMESTAMP。
-
xml中
resultType=""
,sql 中as的值,定义的实体中必须存在,才能调用实体类,set几个值,里面有几个值。 -
日志设置:
private static Logger logger = LoggerFactory.getLogger(ThreadManager.class);
-
项目服务器微服务发现用的consul或者zookeeper
-
配置中心使用的是Apollo
-
resources中
-
apollo-env.properties
:配置Apollo的IP -
application.properties
:应用的配置信息apollo.bootstrap.enabled: true apollo.bootstrap.namespaces:hs-cdr-center,hsrobot.common-config spring.main.allow-bean-definition-overriding=true
-
-
-
什么情况下需要序列化:
- 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
- 当你想用套接字在网络上传送对象的时候;
- 当你想通过 RMI 传输对象的时候
-
对象copy
BeanUtils.copyProperties("转换前的类", "转换后的类");
-
针对map数组中的某个key值进行排序
Collections.sort(List<Map>, new Comparator<Map<String, Object>>() @Override public int compare(Map<String, Object> o1, Map<String, Object> o2) Integer ch = Integer.parseInt(o1.get("ch").toString()); Integer ch1 = Integer.parseInt(o2.get("ch").toString()); return ch.compareTo(ch1); );
-
java8中stream去重操作
-
对
List<String>
去重-
stringList = stringList.stream().distinct().collect(Collectors.toList());
-
-
根据
List<Object>
中Object的某个属性新型去重-
List<Student> studentList = "实体类列表"; studentList = studentList.stream().collect( collectingAndThen( toCollection(() -> new TreeSet<>(Comparator.comparing(Student::getName))), ArrayList::new) );
-
另一种方法
//filter里面的通用过滤条件 private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) Set<Object> seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t)); studentList = studentList.stream().filter(distinctByKey(Student::getName)).collect(Collectors.toList());
-
-
以上是关于java SpringBoot 常用注解 比较方法 排序 项目笔记的主要内容,如果未能解决你的问题,请参考以下文章
java SpringBoot 常用注解 比较方法 排序 项目笔记