在春天请求体场处理

时间:2018-06-06 17:05:56

标签: spring spring-mvc

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

我能想到的方法:

  1. 实现过滤器/拦截器并在那里处理该字段。但是之后 有一个限制,请求正文只能读取一次,所以我 需要通过创建请求包装器来使用一些替代方法。
  2. 在每个控制器中重复逻辑,它非常容易出错 我们需要记住编写该代码的每个新控制器。
  3. 但是这些方法看起来并不清晰。有人可以推荐一种更好的方法吗?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

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

<强> BaseController.java

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

<强> AppController.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");
}
}