首页 > 解决方案 > spring请求body字段处理

问题描述

我正在开发一个基于 Spring 的 Web 应用程序,我们有一些 RestControllers 和一些 Request DTO 类。请求 DTO 包含需要一些验证的令牌字段。所以我使用弹簧验证器来验证这一点。验证后,我们希望使用另一个 REST API 将该字段发送到外部系统(仅用于某种​​分析日志记录)。在多个 DTO 对象及其控制器中重复相同的字段。因此,我可以轻松地为验证器定义注释并在 DTO 中重用它们。但我不确定在验证成功后如何处理该字段(即调用分析 API 以使用该字段后验证),而不将其与控制器的核心逻辑混合。

我能想到的方法:

  1. 实现一个过滤器/拦截器并在那里处理该字段。但是有一个限制,请求正文只能读取一次,所以我需要通过创建请求包装器来使用一些替代方法。
  2. 在每个控制器中重复逻辑,对于每个新控制器,我们都需要记住编写该代码,这很容易出错。

但这些方法中没有一个看起来更干净。有人可以推荐一种更好的方法来实现这一目标吗?

提前致谢。

标签: springspring-mvc

解决方案


您可以在那里创建BaseController并实现该方法。将其扩展BaseController到您需要此日志记录服务的任何地方。如下所示。

BaseController.java

class BaseController {
protected void remoteLogging(String name,String token) {
//Calling the remote log services}
}

应用控制器.java

@Controller
@RequestMapping("register")
public class LeaseController extends BaseController {

@PostMapping("new")
public String new(@Valid @ModelAttribute("registration") Registration registration,BindingResult result){ 
if(rest.hasErrors(){
remoteLogging("name","token");
}
}

推荐阅读