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

@RequestMappings之间的Spring公共方法

堵宏毅
2023-03-14

servlet中,您可以包含一个@override service方法,该方法在doGetdoPost之前调用,那么在Spring@controller中有没有实现相同的方法?

或者更准确地说,在控制器中的每个方法中,我需要确保存在一个实体(在本例中,是一个产品),然后重定向否则,就像这样,那么在Spring中该如何实现呢?注意,我还需要每个方法中可用的产品。

@Controller
@RequestMapping("/product/{prod_id}/attribute")
public class AttributeController {

    @Autowired
    private AttributeService attributeService;

    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public String add(Model model, @PathVariable Long prod_id) {
        Product product = attributeService.getProduct(prod_id);
        if (product == null) {
            return "products/products";
        }
        model.addAttribute("product", product);
        model.addAttribute("attribute", new Attribute());
        return "products/attribute_add";
    }


    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String save(Model model, @PathVariable Long prod_id, @Valid Attribute attribute, BindingResult result) {
        Product product = attributeService.getProduct(prod_id);
        if (product == null) {
            return "products/products";
        }

        // ...
    }

    // ...
}

共有1个答案

皇甫学海
2023-03-14

这可以通过handlerinterceptor来完成。您需要做的只是扩展HandlerInterceptorAdapter#Prehandle,然后通过WebMVCConfigureer#AddInterceptors注册您的拦截器。您可以通过InterceptorRegistry对象(带有InterceptorRegistry#AddInterceptor方法返回的)选择将拦截器与您的所有映射一起使用,或者与某些特定的映射一起使用。

顺便说一句,handlerinterceptor通常用于对请求和响应执行一些实用程序操作,如日志记录、添加头、身份验证等。对于与业务相关的操作,我建议使用ControllerAdvice来处理自定义的面向业务的异常。在这种情况下,它将是一个从数据库中检索product的方法,如果找不到则抛出自定义异常。

 类似资料:
  • 简介 框架中内置封装了一些公共函数,开发者在实际业务中可以直接使用,无需重复封装。其中包括: 协程函数 数组函数 目录(文件夹)函数 环境函数 文件函数 文件系统函数 对象函数 PHP 助手函数 字符串函数 系统函数 XML 函数 通用函数 协程函数 创建协程Swoft 框架中不能使用 Swoole 提供的 go 函数创建协程,否则会造成请求和上下文丢失最终导致一些不可预估的问题。 Swoft 拥

  • 我的解决方案是找到最短的数组,并遍历其中的每个项,检查其他数组的索引。 然而,这似乎效率极低,我正在尝试确定是否有更好的方法,最好不用多次循环。

  • 问题内容: 之间有什么区别 和 有时,我在Internet上看到了一些示例,而这些示例将代替它们,它们都是简单的程序。我用来做作业,其他人也一样 问题答案: 第一个将为您的班级分配默认的可见性,即(即:在同一范围内可访问)。 第二个使得它,对任何其他类都是可见的。 参考:控制对类成员的访问

  • 问题内容: 我正在阅读有关Angular验证的文章,并认为在我自己的项目中使用它会很好。它运行得非常好,我想在成功验证表单后在其他控制器中扩展它的访问方法。我尝试了各种方法来执行此操作,但似乎看不到$ scope对象中的方法。 我希望有人能告诉我我想念的东西才能完成这项工作。我叉了个笨蛋。 问题答案: 正确的方法是使用角度服务。例如: 这样,您可以在注入到的任何控制器中访问内部功能: 看到这个演示

  • 问题内容: 我有一个存储JSON的数据库,以及一个提供外部API的服务器,通过它可以通过HTTP发布更改此数据库中的值。数据库由内部的不同进程使用,因此具有通用的命名方案。 客户看到的密钥不同,但是将1:1与数据库中的密钥映射(有未公开的密钥)。例如: 这是在数据库中: 这是呈现给客户的: API可以根据字段名称进行更改,但是数据库始终具有一致的密钥。 我已经在结构中将字段命名为相同,但对json

  • 当我试图从受保护访问级别的抽象类访问和重写继承的抽象函数时, 在删除受保护的访问类型时,Eclipse会向我抛出以下错误