aop - 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"
}
}
}
预先感谢您的帮助!
解决方案
我找到了解决此问题的解决方法。我没有将对象作为 JSONObject 接收,而是尝试使用 String,它工作正常。
public String getDmsInitialisePageValidToken(HttpServletRequest request, @RequestBody String requestJson) {
//code here
}
唯一的问题是我必须编写额外的代码行来将 String 转换为 JSONObject。
仍然想知道为什么使用 JSONObject 的第一种方法不起作用!