当前位置: 首页 > 知识库问答 >
问题:

在spring mvc中拦截@ResponseBody

贺华容
2023-03-14

我有一个带有conroller的Spring MVC web应用程序,如下所示:

@Controller
public class ActionRestController {
@RequestMapping(value = "/list", method = GET)
@ResponseBody
public List<Action> list(Action action, SearhCriteria searchCriteria) {
     List<Action> ret = new ArrayList<Action>();
     // Call a service method to get the records
     // Copy the records into the list
     // return the list of objects
     return ret;
}
@Controller
public class ActionExtendedController {
@RequestMapping(value = "/searchlist", method = GET)
@ResponseBody
public List<Action> list(Action action, SearhCriteria searchCriteria, Model model) {
     model.addAttribute("searchParameters", searchCriteria);
     return "forward:/list";
}

在这一点上,一切都很好。我要做的是在列表转换为JSON之前,在控制器返回列表的地方拦截请求,并返回包含列表和搜索参数的映射。

现在,由于“不可变”控制器users ResponseBody,控制转到JacksonMessageConverter amd,响应从那里发出。我已经尝试了以下路径,但它们不起作用。

>

  • 拦截器-当我到达这里时,响应已经写出,所以没有办法更改它。

    是否有一种方法可以让Spring AOP在带注释的控制器、处理程序方法上触发,或者有人可以建议另一种方法来拦截处理程序返回值(以及模型)?

  • 共有1个答案

    龙令
    2023-03-14

    对扩展控制器中的基本控制器进行简单的委托怎么样:

    @Controller
    public class ActionExtendedController {
        @Autowired ActionRestController baseRestController;
        @Autowired MappingJacksonJsonView mappingJacksonJsonView;
    
        @RequestMapping(value = "/searchlist", method = GET)
        public View list(Action action, SearhCriteria searchCriteria, Model model) {
            List<Action> actions = baseRestController.list(action, searchCriteria, model);
            model.addAttribute("actions", actions);
            model.addAttribute("searchParameters", searchCriteria);
            return mappingJacksonJsonView;
        }
    

    这样,您将委托给原始控制器,但将此新控制器用于视图。只需将MappingJacksonJsonView注册为bean,它将把所有模型对象(searchcriteria和actions)序列化到json视图中。您甚至不需要返回视图,但也可以使用@ResponseBody,其类型可以保存响应和搜索条件。

     类似资料:
    • 本文向大家介绍详解springmvc拦截器拦截静态资源,包括了详解springmvc拦截器拦截静态资源的使用技巧和注意事项,需要的朋友参考一下 springmvc拦截器interceptors springmvc拦截器能够对请求的资源路径进行拦截,极大的简化了拦截器的书写。但是,千万千万要注意一点:静态资源的放行。 上代码: 问题来了,在请求jsp页面的时候,你的静态资源的访问仍然会被自定义拦截器

    • 我对和的用途有点困惑。 正如我从文档中理解的,拦截器在请求之间运行。另一方面,Filter在呈现视图之前运行,但在Controller呈现响应之后运行。 那么,拦截器中的和过滤器中的之间的区别在哪里呢?

    • 本文向大家介绍springmvc拦截器登录验证示例,包括了springmvc拦截器登录验证示例的使用技巧和注意事项,需要的朋友参考一下 一开始,学了拦截器与过滤器,咋一看两者有点像,实际上两者有很大的不同。就用拦截器和过滤器分别做了登录验证试验,这次先说拦截器。下面是自己实践的一个实例: 在spring-mvc.xml中配置拦截器: 如上所示,这里配置了LoginIntercepter,为了简单起

    • 本文向大家介绍SpringMVC中的拦截器详解及代码示例,包括了SpringMVC中的拦截器详解及代码示例的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是SpringMVC中的拦截器的介绍及实例代码,配置等内容,具体如下。 Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。本文主要总结一下springmvc中拦截器是如何定义

    • 本文向大家介绍防止SpringMVC拦截器拦截js等静态资源文件的解决方法,包括了防止SpringMVC拦截器拦截js等静态资源文件的解决方法的使用技巧和注意事项,需要的朋友参考一下 SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决: 方案一、拦截器中增加针对静态资源不进行过滤(涉及spr

    • 问题内容: 是否可以为ng-click编写拦截器?我有一个按钮或链接,导致后端对象的删除。我想通过将属性添加到按钮/链接来创建一个确认对话框(模式)。例如: AngularJS有可能吗?有没有更好的方法可以解决此问题? 编辑 deleteIt方法驻留在不同的控制器中。 谢谢 问题答案: 我在下面放了一个示例指令: http://plnkr.co/edit/GJwK7ldGa9LY90bMuOfl?