我想完成从控制器收到的JSON响应,例如添加一个状态属性。在这方面,我将使用Aspect类,它的@Around方法返回一个自定义类对象。在这种情况下,我得到一个错误:
java.lang.ClassCastException: *.controller.RestResponse cannot be cast to java.util.List
有没有办法通过aspectJ注释@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();
}
...
}
方面类:
@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;
}
}
自定义类别响应:
public class RestResponse{
private int status;
private String message;
private Object data;
public RestResponse(int status, Object data) {
this.status = status;
this.data = data;
}
public RestResponse(int status, String message) {
this.status = status;
this.message = message;
}
//getters and setters
}
我认为你的切入点有一些问题。如果你只想在控制器类的 get() 方法周围切入点,你应该使用这样的东西:
@Pointcut("execution(* package..Controller.get(..))") .
在你的情况下,你可以通过调试流来检查你应用的点切割是否正在围绕控制器类的 get() 方法或包控制器.api.* 中的其他方法执行。
希望这能解决你的问题。
改为使用响应身体建议。
我正在编写自己的编程语言,由于各种原因,它编译为C。(其中之一是我对汇编知之甚少)。 我有一个关于编译器(例如GCC或Clang)如何优化从函数返回值的问题。假设我有这样的代码: 我的理解是,您可能希望变量A在从FUNC返回时复制到B(如果A和B是结构,这可能会很昂贵)。编译器会认识到在这种情况下,B可以指向a所在的位置,而不需要拷贝吗? 如果main()看起来像这样:怎么办? 谢谢大家!
我不确定这在Java中是否可行。而且,我也不知道该在谷歌上查询什么。无论如何,我想要一个方法,它将一个类(接口或类)作为参数,并且该方法的返回类型是该类的一个实例。我不想事后重铸一个物体。 我不确定这个功能是否存在,或者语法是什么。假设我有一个名为XYZ的类,这是我的伪方法。 现在假设XYZ是某种通用语法。这在Java中可能吗?谢谢你的帮助。
尾部调用优化对返回void的函数的递归调用有效吗?例如,我有一个函数,void fun() 在这里,编译器不会知道,调用fun()是最后一条语句。那么尾部调用优化是否只针对返回某些值的函数?
我有一节课
我有一个关于显示void类型的返回值的问题。因此trimLines是一个void类型的方法。我不明白如何显示void类型的方法,因为该方法没有返回任何东西,所以没有任何东西可以显示。由于采用字符串类型,这将导致错误。
如果我有以下代码 首先,这甚至是可能的,因为它编译得很好。但是我不能使用中的方法执行操作: makeCan是否不同时返回Can和PromotionalCan?如果是这样,当返回PromotionalCan时,如何对变量进行操作?谢谢 编辑:PromotionalCan继承自Can,第二种方法是在PromotionalCan中