Spring Boot Actuator提供了一些Endpoint(端点),比如health、metrics、info等,同时支持我们自定义一些Endpoint。

同时,基于Spring Boot我们又可以定义一些对外可访问的Controller。那么,针对一个业务功能,如何区判断是基于Controller还是基于Endpoint进行定义呢?也就是说Spring中Controller和Endpoint的区别是什么?

首先,Endpoint可以理解为是Controller的更具体和特殊的实现。

Endpoint不依赖于视图(例如 JSP)在HTML中呈现模型数据,而是简单地将要写入的数据直接返回到响应主体中(类似于在Controller中执行@ResponseBody)。

Actuator Endpoint优点

在以下情况下Actuator Endpoint是更好的选择:

  • Endpoint旨在基于HTTP执行打印Object(Json)的高度定制化任务。
  • 将监控和管理的代码与特定于应用程序的代码分开。
  • 保持代码的清洁和高内聚。

@Controller和@Endpoint的区别

在Micronaut框架中,可以通过如下方式声明Controller:

@Controller("/endpoint") 
public class DummyService {
    @Get 
    @Produces(MediaType.TEXT_PLAIN) 
    public String index() {
        return "Hello World!"; 
    }
}

同时,也可以使用如下方式声明Endpoint:

@Endpoint("/endpoint") 
public class DummyService {
    @Get 
    @Produces(MediaType.TEXT_PLAIN) 
    public String index() {
        return "Hello World!"; 
    }
}

这两种方式是可以相互替换的,但哪个一种方式更合适呢?

通常@Endpoint用于监控和管理(比如,调整日志级别、管理缓存、监控资源利用率等),需要被特殊对待(处理),而不应该用于应用程序功能。

而@Controller是常规的Rest服务,应用于不属于管理和监控的应用程序端点。



Spring中Controller和Endpoint的区别插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2021/07/09/spring-controller-endpoint/