SpringBoot开发中的一些小细节(七)

SpringBoot开发中的一些小细节(七)

2019, Feb 20    

前言

过年后第一次开始更新啦,这一篇主要就用来总结年后以来有意思,有用的一些信息

在Controller中的一些注解

Controller的类型

主要有两种,一种是普通的,通常是被使用服务于web页面的。默认,你的controller方法返回的是一个string串,是表示要展示哪个模板页面或者是要跳转到哪里去。

@Controller

另外一种是专门用在编写API的时候,返回一个JSON,或者是XML等等。然后方法返回的是可以是一个对象,或者是一个可以被序列化的对象。

@RestController

路由的类型

这里的路由就是指http method。(GET,POST,PUT,PATCH,DELETE)。

@GetMapping
@PostMapping
@PutMapping
@PatchMapping
@DeleteMapping

同时,在Controller上面可以加上一个@RequestMapping,可以将所有类型路由的前缀都放在上面

@RestController
@Slf4j
@Api(tags = "11. xxxxx")
@RequestMapping("/api/v1")
@RequiredArgsConstructor
public class DataController {

private final DataService dataService;

@ApiOperation("11.1 xxxx")
@GetMapping("/statistics")
public Response<DataDeployDto> deployTask(@Validated DataParam query){
      log.info("data Query {}", JSONObject.toJSON(query));

      return ResponseUtil.makeSuccess(dataService.deployData(query));
  }
}

在Controller内的传参的注解

@ApiOperation("1.1 创建业务线")
@PostMapping("/save")
public Response save(@RequestBody @Validated CustomProductAddParam customProductAddDto) {
log.info("save() {}", JSONObject.toJSON(customProductAddDto));

customProductService.save(customProductAddDto, true);

return ResponseUtil.makeSuccess(null);
}

@RequestBody 就是要求传的数据是一个json格式的body传入的,这样前端会比较麻烦,因此在不需要的时候可以将这个注解取消掉
有@RequestBody
有@RequestBody

无@RequestBody
无@RequestBody

@Validated 就是在传参的时候需要判断验证,比如是不是为空什么(NotNull)

空指针的问题

这是个老问题了,前面什么都没传的时候,到后端的时候是变成的null,CollectionUtils.isEmpty()可以用来判断Collection是空还是null,源码实现如下

public static boolean isEmpty(Collection coll) {
  return (coll == null || coll.isEmpty());
}

Int到Long的转换

Long count = (long) all.size();

强制转换int到long,注意括号里面是小写

MongoDBTemplate的查询分页

@Override
public PagerData<GreyTask> list(GreyTaskListParam param) {
Criteria criteria = new Criteria();

if (StringUtils.isNotEmpty(param.getName())) {
    criteria.and("name").regex(param.getName());
}
if (StringUtils.isNotEmpty(param.getType().toString())) {
    criteria.and("type").is(param.getType());
}

Query query = new Query();
query.addCriteria(criteria)
        .with(new Sort(Sort.Direction.DESC, "createTime"))
        .skip(param.getSkip()).limit(param.getPageSize());

List<GreyTask> all = greyTaskRepo.findAll(query);

Long count = (long) all.size();
return new PagerData<>(all, count, param.getPageSize(), param.getPageNo());
}

阿里云域名备案

会有一个验证短信,要自己上网页去验证,不要因为自己疏忽就忘了,然后就被打回来了QAQ,开始以为是什么骚扰短信呢

Kali Linux

黑客专用的系统,有空的时候可以看看,学习一下系统安全知识

GFW

自己搭的vpn突然用不了,后来发现就是被墙了(ip banned),解决方式,就是换一个ip