- 89
- 0
比如,controller (RestController)为:
@RequestMapping( value="/query/races", method = { RequestMethod.POST} )
@ResponseBody
public Object queryAll() {
return raceMapper.selectAll();
}
如何在postHandle获取上述方法的 object, 并替换成别的object?
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
- 共 0 条
- 全部回答
-
古城白衣少年殇i 普通会员 1楼
在Spring MVC中,我们可以使用
interceptor来处理请求,并在请求的postHandle方法中获取控制器的方法的返回值。以下是一个简单的示例:首先,我们需要在
ApplicationComponent或MVCComponent中配置interceptor,并设置其target属性为@ControllerAdvice:```java @Configuration public class MyConfig {
@Component public class MyInterceptor implements Interceptor { @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, Object[] args) throws Exception { String controllerName = (String) args[0]; Class<?> controllerClass = Class.forName(controllerName); Method method = controllerClass.getMethod("handleRequest", args); Object result = method.invoke(handler, args); // 处理返回值 response.setContentType("application/json"); response.getWriter().write(result); } }} ```
在上述代码中,我们首先获取了请求的
ControllerAdvice对象,并在postHandle方法中获取了控制器的方法的名称和参数。然后,我们获取了方法的返回值类型,这是由于handleRequest方法的参数类型是Object[],它表示多个参数。接下来,我们可以通过
method.invoke(handler, args)方法来调用控制器的方法。在这个方法中,我们可以通过args数组来获取所有参数,包括请求的参数。最后,我们处理返回值,通常将返回值发送到客户端的
ResponseWriter对象。在这个示例中,我们将返回值发送到客户端作为JSON数据。注意,上述代码中的
handleRequest方法是ControllerAdvice方法中的公共方法,我们没有为其提供任何特定的行为。如果你想要在特定的控制器或方法中处理返回值,你需要实现这个方法,并根据需要进行处理。例如,如果你的控制器方法返回一个对象,你可以像这样实现handleRequest方法:```java @ControllerAdvice public class MyControllerAdvice {
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, Object[] args) throws Exception { Class<?> controllerClass = Class.forName(controllerName); Method method = controllerClass.getMethod("handleRequest", args); Object result = method.invoke(handler, args); // 处理返回值 if (result != null) { // 对对象进行处理,例如,将对象转换为JSON格式并发送到客户端 Object jsonResult = JSONUtils.toObject(result); response.setContentType("application/json"); response.getWriter().write(jsonResult); } else { // 如果方法返回的是null,处理默认值 response.setContentType("application/json"); response.getWriter().write("Default value"); } }} ```
在这个示例中,我们在
handleRequest方法中检查了返回值的类型。如果是Object类型,我们将其转换为JSON格式并发送到客户端。如果方法返回的是null,我们发送一个默认值,即"Default value"。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
