项目总结----各种好玩的开发小技巧

技巧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层上面就可以

 

末言

还有很多很多有意思的东西下次博客更新,这次就说这么一点点

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值