技巧1:怎么通过正则表达式校验数据
private static final String IDREGEX = "[a-zA-Z0-9]{1,37}+";
@GetMapping("/selectDetailById")
public JsonResult selectDetailById(String id) {
if (id.matches(IDREGEX)) {
}
}
解释:IDREGEX是正则表达式,然后通过matches()函数可以校验传进来的id是不是和正则表达式所要求的相符合,如果是符合返回true,如果不符合返回false;
技巧2:怎么通过注解校验数据
背景:在现在前后端分离的开发环境,虽然前端会首先进行一次数据格式校验,但是测试肯定不会通过前端来测试,而是通过接口来测试你的方法,这个时候后端就要自己进行数据校验,让符合条件的数据对数据库进行操作。
@NotBlank(message = "部门名不能为空")
@Length(min = 1, max = 12, message = "部门名长度必须是{min}与{max}之间")
@Pattern(regexp = "^[\\u4e00-\\u9fa5]{1,12}$", message = "部门名必须为汉字")
private String userDepartment;
解释:@NotBlank为空校验,message填写为空提示信息
@Length是长度校验,min最低长度,max是最长长度
@Pattern是正则校验
还有一个注解是为了json转对象的时候忽略这个属性用的:@JsonIgnore
技巧3:后端怎么快速对象转json数据
@RestController
@RequestBody
解释:主要通过这两个注解,@RequestBody作用于mvc的Controller层,主要就是将数据直接输出到前端页面,在前后端分离开发中前端获取的就是json数据。
@RestController就是对整个Controller层进行统一的配置,就是每个返回值都会输出到前端页面
技巧4:怎么快速接收前端传来的json数据并转成对象
@RequestMapping(value = "/login")
public JsonResult login(@RequestBody UserInfoForm userInfoForm, HttpServletRequest request){
String id = userInfoFrom.getId;
JsonResult jsonResult = ResultFactory.getResult();
return jsonResult;
}
解释:前提就是前端传过来的数据,属性名要一致,这样还不可以直接用对象接收,要在前面加一个@RequestBody这样json数据就直接转对象了,然后前面所提到的@JsonIgnore就可以放在这个对象中,让他忽略某个属性,不进行json数据转换
技巧5:如何用aop打印日志
package com.haha.haha.config;
import com.suixingpay.xinghuo.domain.JsonResult;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Arrays;
/**
* @Author xianglong
* 通过log打日志
*/
@Aspect
@Component
public class ControllerAspectConfig {
private static Logger logger = LoggerFactory
.getLogger(ControllerAspectConfig.class);
@Pointcut("within(com.hah.hah.controller.*)")
public void matchType() {
}
@Before("matchType()")
public void permissionCheck(JoinPoint point) {
logger.trace(" @Trace START 执行方法"+"["+point.getSignature().getDeclaringTypeName() +
"." + point.getSignature().getName()+"]");
logger.trace(" @Trace 传入参数"+ Arrays.toString(point.getArgs()));
logger.trace(" @Trace 被植入对象"+"["+point.getTarget()+"]"+"@Trace END");
}
@Around("matchType()")
public Object execute(ProceedingJoinPoint point) throws Throwable {
Object[] args = point.getArgs();
Object returnValue = point.proceed(args);
return returnValue;
}
@AfterReturning(returning = "rvt", pointcut = "matchType()")
public Object AfterExec(JoinPoint joinPoint, JsonResult rvt) { //pointcut是对应的注解类 rvt就是方法运行完之后要返回的值
logger.trace(" @Trace [ code: "+rvt.getCode()+"] message ["+rvt.getMessage()+"]");
return rvt;
}
}
解释:这个博客写的挺好的:对注解实现aop有一个通俗易懂的例子 https://blog.csdn.net/two_people/article/details/52181599
至于怎么打日志:这个对于初学者还是挺有思考价值的,不巧,我就是初学者,我打印了controller层的入参和返回值,对程序的过程进行简单的监控。至于怎么获取controller层的入参和返回值就需要学习两个类的使用JoinPoint和ProceedingJoinPoint的作用,能够通过方法获得哪些值,这个博客有详细解释:https://blog.csdn.net/qq_15037231/article/details/80624064
技巧7:怎么解决前后端分离跨域请求
@CrossOrigin(origins = "*")
解释:这个注解加在Controller层上面就可以
末言
还有很多很多有意思的东西下次博客更新,这次就说这么一点点