几十行代码基于Netty搭建一个 HTTP Server( 六 )
实际上 , 获得了 URI 的查询参数的对应关系 , 再结合反射和注解相关的知识 , 我们很容易实现类似于 Spring Boot 的 @RequestParam
注解了 。
建议想要学习的小伙伴 , 可以自己独立实现一下 。 不知道如何实现的话 , 你可以参考我开源的轻量级 HTTP 框架jsoncat (仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架) 。
POST 请求的处理@Slf4jpublic class PostRequestHandler implements RequestHandler {@Overridepublic Object handle(FullHttpRequest fullHttpRequest) {String requestUri = fullHttpRequest.uri();log.info("request uri :[{}]", requestUri);String contentType = this.getContentType(fullHttpRequest.headers());if (contentType.equals("application/json")) {return fullHttpRequest.content().toString(Charsets.toCharset(CharEncoding.UTF_8));} else {throw new IllegalArgumentException("only receive application/json type data");}}private String getContentType(HttpHeaders headers) {String typeStr = headers.get("Content-Type");String[] list = typeStr.split(";");return list[0];}}
对于 POST 请求的处理 , 我们这里只接受处理 Content-Type 为 application/json
的数据 , 如果 POST 请求传过来的不是 application/json
类型的数据 , 我们就直接抛出异常 。
实际上 , 我们获得了客户端传来的 json 格式的数据之后 , 再结合反射和注解相关的知识 , 我们很容易实现类似于 Spring Boot 的 @RequestBody
注解了 。
建议想要学习的小伙伴 , 可以自己独立实现一下 。 不知道如何实现的话 , 你可以参考我开源的轻量级 HTTP 框架jsoncat (仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架) 。
请求处理工厂类public class RequestHandlerFactory {public static final Map REQUEST_HANDLERS = new HashMap<>();static {REQUEST_HANDLERS.put(HttpMethod.GET, new GetRequestHandler());REQUEST_HANDLERS.put(HttpMethod.POST, new PostRequestHandler());}public static RequestHandler create(HttpMethod httpMethod) {return REQUEST_HANDLERS.get(httpMethod);}}
我这里用到了工厂模式 , 当我们额外处理新的 HTTP Method 方法的时候 , 直接实现 RequestHandler
接口 , 然后将实现类添加到 RequestHandlerFactory
即可 。
启动类public class HttpServerApplication {public static void main(String[] args) {HttpServer httpServer = new HttpServer();httpServer.start();}}
效果运行 HttpServerApplication
的main()
方法 , 控制台打印出:
[nioEventLoopGroup-2-1] INFO io.netty.handler.logging.LoggingHandler - [id: 0x9bb1012a] REGISTERED[nioEventLoopGroup-2-1] INFO io.netty.handler.logging.LoggingHandler - [id: 0x9bb1012a] BIND: 0.0.0.0/0.0.0.0:8080[nioEventLoopGroup-2-1] INFO io.netty.handler.logging.LoggingHandler - [id: 0x9bb1012a, L:/0:0:0:0:0:0:0:0:8080] ACTIVE[main] INFO server.HttpServer - Netty Http Server started on port 8080.
GET 请求
文章插图
POST 请求
文章插图
推荐阅读
- 华硕基于WRX80的主板现身 为AMD Ryzen Threadripper Pro打造
- 锐龙5000微代码更新:超频更稳、X570无需风扇
- 微软新版电子邮件客户端截图曝光:基于网页端Outlook
- 小米MIUI代码泄露新机:或edmi K40
- 曝光 | 小鹏或春节前推送NGP更新,基于高精地图可自动变道
- 用Python制作图片验证码,这三行代码完事儿
- 基于Spring+Angular9+MySQL开发平台
- 微软称SolarWinds黑客攻击波及公司内部的源代码存储库
- 整合零代码+AI+云原生技术,「速优云」布局智慧教培和智慧社区
- 终于可以自定义喇叭声:你的特斯拉可以“放屁”吓唬人了