博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Aop 统一处理 返回结果(修改图片链接)
阅读量:3952 次
发布时间:2019-05-24

本文共 3439 字,大约阅读时间需要 11 分钟。

/**     * 返回 5 条蛋糕消息     * @param page 传入的参数     * @return     */    @GetMapping("/cake/{page}")    @ResponseBody    public List
cake(@PathVariable Integer page) {
int maxRange = 1000; if(page<=0||page >maxRange) {
return Collections.emptyList(); } return cakeInfoService.homePage(new Page<>(page, CakeInfo.SELECT_SIZE)); }

图片存储在服务器上,然后数据库写入的是绝对路径,要把返回前端的路径修改一下,因为在拦截器设置的路径映射不一样

让哥告诉你 AOP的玩法

package com.ywfcake.demo.config;import org.springframework.stereotype.Component;import org.springframework.util.ClassUtils;import java.util.Objects;/** * @Author lyr * @create 2020/3/22 14:06 */@Componentpublic class Constant {
public String dir = Objects.requireNonNull(Objects.requireNonNull(ClassUtils.getDefaultClassLoader()) .getResource("")) .getPath()+"/static/upload/tmp/" ; public String webDir = "/show/";}

自定义一个标记注解

package com.ywfcake.demo.config;import java.lang.annotation.*;/** * @Author lyr * @create 2020/3/22 16:37 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ListHandler {
}
package com.ywfcake.demo.config;import com.ywfcake.demo.entity.pojo.CakeInfo;import com.ywfcake.demo.exception.ServiceException;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.annotation.Resource;import java.util.List;import java.util.stream.Collectors;/** * @Author lyr * @create 2020/3/22 16:25 */@Aspect@Component@Slf4jpublic class ListAspect {
@Resource private Constant constant; //execution用于切出类的方法,其实还可以指定对应的打上注解的方法 @Pointcut("@annotation(ListHandler)") public void delegate(){
} @Around("delegate()") public Object around(ProceedingJoinPoint pjp) {
Object result = null; try{
//System.out.println("前"); result = pjp.proceed(); //System.out.println("后"); //后置通知 } catch (Throwable throwable) {
//异常通知 throw new ServiceException(throwable,"aop出现了异常"); }finally {
//最终通知 } if(result!=null) {
List
list = (List
)result; list = list.stream().map(cakeInfo -> cakeInfo.setImageLink(cakeInfo.getImageLink().replace(constant.dir,constant.webDir))) .collect(Collectors.toList()); log.info("AOP 返回结果{}",result); log.info("dir: {}",constant.dir); log.info("webDir: {}",constant.webDir); return list; } return result; }}

在接口方法 或者实现方法上打个注解

@ListHandler    @Cacheable(value = "homeFirstPage")    @Override    public List
homeFirstPage() {
return this.page(new Page
(1,CakeInfo.SELECT_SIZE),homeWrapper).getRecords(); }

这样就可以轻松复用处理逻辑

别忘记导包

org.aspectj
aspectjrt
org.aspectj
aspectjweaver
org.springframework.boot
spring-boot-starter-aop

AspectJ框架为 Aop实现提供了一套注解,用来取代 配置文件中为实现AOP功能所配置的臃肿代码

转载地址:http://fauzi.baihongyu.com/

你可能感兴趣的文章
【Asp.net】Web服务器控件
查看>>
【Asp.net】内置对象
查看>>
C语言数据类型笔记 by STP
查看>>
C语言指针笔记 by STP
查看>>
CoreLocation笔记 by STP
查看>>
Application Transport Security has blocked a cleartext HTTP (http://) 解决方案
查看>>
The identity used to sign the executable is no longer valid.解决方案
查看>>
Xcode增加pch文件
查看>>
CocoaPods安装和使用笔记 by STP
查看>>
Could not find developer disk image-解决方案
查看>>
升级Xcode之后VVDocumenter-Xcode不能用的解决办法
查看>>
iOS开发常见报错及解决方案 by STP
查看>>
SVN(Cornerstone)屏蔽/忽略不需要版本控制的UserInterfaceState.xcuserstate
查看>>
IOS 8 以上版本 设置applicationIconBadgeNumber和消息推送
查看>>
git常用命令
查看>>
Java 基本数据类型笔记by STP
查看>>
IDEA创建Maven项目时 loading archetype list转菊花转十年解决方案
查看>>
Mac启动tomcat
查看>>
报错: java.sql.SQLException: The server time zone value '�й�' is unrecognized or represents more ...
查看>>
使用xshell对服务器上的sql文件进行操作(mysql导入Linux)
查看>>