Spring中Controller和Endpoint的区别
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服务,应用于不属于管理和监控的应用程序端点。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:https://choupangxia.com/2021/07/09/spring-controller-endpoint/