您的位置:首页 > 编程语言 > ASP

Springboot 利用Aspect 解决NULL 返还为""

2017-05-15 00:00 176 查看
摘要: 主要是利用Aspect的机制来解决java 中null 字段 为"" 的问题,前端更容易去处理数据

废话就不多说了直接上代码:

/**
* Controller层AOP,记录请求和返回结果日志扫描controller日志
*
* @author reasahi
* @version 1.0.0
*/
@Aspect
@Component
public class WebLogAspect {

/**
* 日志
*/
private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Resource
private MappingJackson2HttpMessageConverter converter;

/**
* 同步计算每次请求时间
*/
ThreadLocal<Long> startTime = new ThreadLocal<>();
// 要扫描多个Controller  使用这种方式进行处理,如果你的包里面分了多个Controller;如果只有一个删除一个execution留一个就行了
@Pointcut("execution(public * com.exclmpl.controller.*.*(..)) || execution(public * com.exclmpl.webController.*.*(..))")
public void webLog() {
}

@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
startTime.set(System.currentTimeMillis());
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求内容
logger.info("请求连接 : " + request.getRequestURL().toString());
logger.info("请求方式 : " + request.getMethod());
logger.info("请求IP: " + IpHost.getIpAddr(request));
logger.info("请求类: " + joinPoint.getSignature().getDeclaringTypeName() + "."
+ joinPoint.getSignature().getName());
// logger.info("请求参数 : " + params);
logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
}

@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
logger.info("请求返还内容 : " + ret);
logger.info("耗时 : " + (System.currentTimeMillis() - startTime.get()) + "毫秒");
}

@Around(value = "webLog()")
@ResponseBody
public void formatResult2JSON(ProceedingJoinPoint pjp) throws Throwable {

HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
//移除所有字段为null的字段,其实就是使用了toString 之后移除 所有的null字段,但是这样处理的后果就是所有返还字段内不能带有null这样小写的字段,否则将会全部被移替换掉
String result=pjp.proceed().toString().replaceAll("null", "\"\"");
converter.write(JSONObject.fromObject(result), MediaType.APPLICATION_JSON_UTF8, outputMessage);
shutdownResponse(response);
}

@AfterThrowing(pointcut = "webLog()", throwing = "error")
public void handleForException(JoinPoint jp, Throwable error) throws Throwable {
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
//这里可能会报错,原因是因为你在 try ctah模块里面用

e.printStackTrace();

如果你不需要正式环境下有这个,那么最好注销或者使用e.getMessage();

converter.write(JSONObject.fromObject(error.getMessage()), MediaType.APPLICATION_JSON_UTF8, outputMessage);
shutdownResponse(response);
}

private void shutdownResponse(HttpServletResponse response) throws IOException {
response.getOutputStream().close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐