首页 > 解决方案 > Spring AOP - JointPoint 未收到我​​发送的 Json

问题描述

我是这种 AOP 技术的新手,在 Aspect 类的方法中获取 json 主体时遇到问题。

这是我的控制器方法:

@PostMapping("/startDMS")   
@ResponseBody 
public String getDmsInitialisePageValidToken(HttpServletRequest request, @RequestBody JSONObject requestJson) {
   logger.debug("/initialiseView");
   return "{\"SUCCESS\" :\"DMS initialisation.\"}";
}

这是我的方面方法:

@Around("tokenValidationPointCut()")
public Object validateToken(ProceedingJoinPoint pjp) {
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
    try {

        JSONObject requestJson = null;
        Object[] requestParams = pjp.getArgs();
        System.out.println("Array Object Length: " + requestParams.length);
        if (requestParams != null && requestParams.length > 0) {
            System.out.println("Object2: " + requestParams[1]);
            for (Object object : requestParams) {
                if (JSONObject.class.equals(object.getClass())) {
                    requestJson = (JSONObject) object;
                    System.out.println("Json Object: " + requestJson);
                    break;
                }
            } 
        }
        //rest of the code

        if(Constants.TOKEN_VALIDATION_STATUS.TOKEN_VALIDATION_SUCCESS.equals(jsonTknObject.getTokenValidation().getStatus())) {

            return pjp.proceed();
        }

    }catch (Throwable e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    return loginViews.getTokenValidationError(request);
}

@Pointcut("execution(* com.dms.controller.*.*ValidToken(..))")
public void tokenValidationPointCut() {
    System.out.println("This method is tokenValidationPointCut.");
}

我正在使用 Postman 进行测试,并将 Json 作为正文发送。但是在代码中,我打印接收到的 json,输出是这样的:

20:20:52,570 INFO  [stdout] (default task-4) Array Object Length: 2
20:20:52,570 INFO  [stdout] (default task-4) Object2: {}
20:20:52,570 INFO  [stdout] (default task-4) Json Object: {}

这是json字符串:

{
    "JSON_INITIATE": {
    "initialisation": {
    "status": "REQUEST",
    "token": "abcd1234",
    "user_id": "1234",
    "user_role":"GA",
    "request_type":"DMS_INITIALISATION"
  }
 }
}

预先感谢您的帮助!

标签: aopspring-aop

解决方案


我找到了解决此问题的解决方法。我没有将对象作为 JSONObject 接收,而是尝试使用 String,它工作正常。

public String getDmsInitialisePageValidToken(HttpServletRequest request, @RequestBody String requestJson) {
   //code here
}

唯一的问题是我必须编写额外的代码行来将 String 转换为 JSONObject。

仍然想知道为什么使用 JSONObject 的第一种方法不起作用!


推荐阅读