小编Ale*_*der的帖子

使用AspectJ spring-aop更改返回值的类型

我想完成从控制器收到的JSON响应,例如状态属性.在这方面,我将使用Aspect类,其中@Around方法返回一个自定义类对象.在这种情况下,我收到一个错误:

java.lang.ClassCastException: *.controller.RestResponse cannot be cast to java.util.List
Run Code Online (Sandbox Code Playgroud)

有没有办法通过aspectJ annotation @Around将@ResponseBody类型的返回更改为自定义类型?我无法更改控制器代码!

控制器类:

@Controller
@RequestMapping(value = "/users")
public class UserController {

@Autowired
private UserService userService;

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<User> get() throws InterruptedException {
    return userService.getUsers();
}
...
}
Run Code Online (Sandbox Code Playgroud)

Aspect类:

@Component
@Aspect
public class RestInterceptor {

@Pointcut("within(* controller.api.*)")
public void endpointMethod() {
}

@Around("endpointMethod()")
public RestResponse unifyResponse(ProceedingJoinPoint pjp) throws Throwable {
    Object controllerResult = pjp.proceed();
    RestResponse result = new RestResponse(0, controllerResult);
    return result;
}
}
Run Code Online (Sandbox Code Playgroud)

自定义类RestResponse:

public class RestResponse{

private …
Run Code Online (Sandbox Code Playgroud)

java aspectj return spring-aop

7
推荐指数
1
解决办法
7709
查看次数

标签 统计

aspectj ×1

java ×1

return ×1

spring-aop ×1