您的位置:首页 > 编程语言 > Java开发

springboot学习小记_2

2018-01-08 16:27 197 查看
需要结合《springboot学习小记_1》里面的代码

1。使用@Valid表单验证
    如:保存的Girl对象age必须大于18
a)在Girl这个对象的age属性上添加注解:
@Min(value = 18,message = "你的年龄未满18!")//校验这个属性,最小为value值,否则提示message

b)修改保存对象的方法为:
@PostMapping(value = "/girls2")
public Girl girlAdd2(@Valid Girl girl, BindingResult bindingResult){//@Valid表示需要验证,BindingResult用来存放对象是否通过校验的通知结果
if(bindingResult.hasErrors()){
System.out.println(bindingResult.getFieldError().getDefaultMessage());
return null;
}
girl.setAge(girl.getAge());
girl.setCupSize(girl.getCupSize());
return girlRepository.save(girl);
}


1.1 @JsonIgnore的使用:
在需要转换成json数据的bean对象的某个属性上使用,会使转换后的json忽略这个属性

1.2 @JsonFormat的使用
如某个bean对象的属性是时间戳,可注解:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss a",locale="zh",timezone="GMT+8")
转换成的Json就会是格式化后的时间格式 

1.3 @JsonInclude的使用
如需要返回的Json数据里面,属性值为空时不返回这个属性,可在这个属性上注解:@JsonInclude(Include.NON_NULL)

2。使用AOP处理请求
A)AOP统一处理请求日志

1)AOP(面向切面编程,Aspect Oriented Programming)是一种编程范式,与语言无关,是一种程序设计思想
2)OOP(面向对象编程,Object Oriented Programming)
3)POP(面向过程编程,Procedure Oriented Programming)

B)需要在maven中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
C)创建切面日志类
package com.example.demo.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
* Created by admin on 2017/12/21.
*/
@Aspect
@Component
public class HttpAspect {
private final static Logger logger= LoggerFactory.getLogger(HttpAspect.class);//org.slf4j.Logger:spring自带的日志框架

@Pointcut("execution(public * com.example.demo.controller.GirlController.*(..))")
public void pointcut(){}

@Before("execution(public * com.example.demo.controller.GirlController.*(..))")
public void log(JoinPoint joinPoint){
//        System.out.printf("打开方法");
logger.info("kwkwkwkkwkwkwkww");
ServletRequestAttributes attributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request=attributes.getRequest();
logger.info("url={}",request.getRequestURL());
logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());//类名+类方法
}

/**
* 输出返回的数据
* @param object
*/
@AfterReturning(returning = "object",pointcut = "poincut()")
public void doAfterReturnning(Object object){
logger.info("response={}",object);
}

}


3。统一异常处理

4。单元测试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: