Я использую Spring AOP для точечной резки моего контроллера и пытаюсь вернуть общий ответ структуры на внешний интерфейс.Определение должно быть таким, как показано ниже:
public class CommonResponse {
private String status;
private String message;
private Object data;
}
У меня также есть определение точки, как показано ниже:
@Aspect
@Component
public class PostMessageInterceptor {
@Pointcut("within(org.moa.controller.*)")
public void postMessageConvert() {}
@Around("postMessageConvert()")
public CommonResponse modifyResult(ProceedingJoinPoint pjp) {
CommonResponse response = new CommonResponse();
try {
Object result = pjp.proceed();
response.setStatus("success");
response.setData(result);
}catch(Throwable t) {
response.setStatus("failure");
response.setMessage(t.getMessage());
}
return response;
}
}
Например, когда метод в типе возврата контроллера равен Map<String,String>
, после *При выполнении 1008 * тип возврата имеет значение CommonResponse
с Map<String,String>
, тогда в Spring AOP возникнет исключение java.lang.ClassCastException: CommonResponse cannot be cast to java.util.Map
Если я изменю тип возврата этого метода на Object, он будет работать нормально.
Я просто хочу, это так задумано?В противном случае, есть ли способ, которым я могу достичь этой цели без изменения типа возвращаемого значения для объекта.Поскольку это кажется странным, все методы возвращают один и тот же тип объекта.