我是这种AOP技术的新手,在将JSON正文放入Aspect类中的方法时遇到了问题。
这是我的控制器方法:
@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"
}
}
}
提前感谢您的帮助!
答案 0 :(得分:0)
我找到了解决此问题的解决方法。我尝试使用String而不是将对象作为JSONObject接收,并且效果很好。
public String getDmsInitialisePageValidToken(HttpServletRequest request, @RequestBody String requestJson) {
//code here
}
唯一的问题是我必须编写另一行代码才能将String转换为JSONObject。
仍然想知道为什么使用JSONObject的第一种方法不起作用!