我是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"
}
}
}提前感谢您的帮助!
发布于 2018-06-21 12:58:21
我找到了这个问题的变通解决方案。我没有接收JSONObject形式的对象,而是尝试使用String,它工作得很好。
public String getDmsInitialisePageValidToken(HttpServletRequest request, @RequestBody String requestJson) {
//code here
}唯一的问题是,我必须额外编写一行代码来将字符串转换为JSONObject。
仍然想知道为什么JSONObject的第一个方法不起作用!
https://stackoverflow.com/questions/50939714
复制相似问题