鍍金池/ 問(wèn)答/Java  網(wǎng)絡(luò)安全/ SpringBoot使用AOP攔截請(qǐng)求獲得對(duì)象參數(shù)的JSON

SpringBoot使用AOP攔截請(qǐng)求獲得對(duì)象參數(shù)的JSON

SpringBoot使用AOP攔截請(qǐng)求獲得對(duì)象參數(shù)的JSON
例如

Entity類:

public class Company {
    private Integer id;

    private String companyName;

    private Integer companyState;

    public Company(Integer id, String companyName, Integer companyState) {
        this.id = id;
        this.companyName = companyName;
        this.companyState = companyState;
    }

    public Company() {
        super();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public Integer getCompanyState() {
        return companyState;
    }

    public void setCompanyState(Integer companyState) {
        this.companyState = companyState;
    }
}

Action類:

@RestController
@RequestMapping("company")
public class CompanyAction {

    @RequestMapping(value="updateone",method=RequestMethod.POST)
    public ReturnJSON<List<Company>> updateOne(@RequestBody Company company_param){

        System.out.println("進(jìn)入action");
        
        return new ReturnJSON<List<Company>>(null);
    }
}

Aop類:

@Aspect
@Component
public class LogAspect {
    
    @Pointcut("execution(public * com.action.*.*(..))")  
    public void webLog(){}  
    
    @Around("webLog()")  
    public Object arround(ProceedingJoinPoint pjp) {  
        System.out.println("方法環(huán)繞start.....");  
        try {  
            System.out.println("ARGS : " + Arrays.toString(pjp.getArgs()));  
            Object o =  pjp.proceed();  
            System.out.println("方法環(huán)繞proceed,結(jié)果是 :" + o);  
            return o;  
        } catch (Throwable e) {  
            e.printStackTrace();  
            return null;  
        }  
    }  
}

當(dāng)我發(fā)出請(qǐng)求后,控制臺(tái)顯示這樣:

方法環(huán)繞start.....
ARGS : [com.entity.Company@38250ab4]
進(jìn)入action
方法環(huán)繞proceed,結(jié)果是 : com.entity4action.ReturnJSON@7a6f374c

我發(fā)送請(qǐng)求的參數(shù)是一個(gè)JSON,然后讓SpringBoot自己通過(guò)JSON解析成對(duì)象Company的,但是我想用AOP來(lái)記錄具體請(qǐng)求收到的JSON是怎樣的,我應(yīng)該要怎么寫(xiě)?是不是不應(yīng)該攔截這個(gè)類,而是攔截SpringBoot的某個(gè)類?

回答
編輯回答
悶油瓶

直接寫(xiě) JsonUtil.toJson(pjp.getArgs()) 就行

2018年1月5日 02:59
編輯回答
別硬撐

這就是@RequestBody和@Pointcut("execution(public com.action..*(..))")誰(shuí)先生效的問(wèn)題,雙方都是AOP,不過(guò)看這個(gè)結(jié)果是@RequestBody先生效了,在public Object arround(ProceedingJoinPoint pjp)里面只能獲取到一個(gè)Company對(duì)象,原始的json已經(jīng)沒(méi)了。

2017年11月9日 06:59