分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

基于Netty实现的RESTful框架--netty-rest-server

发布时间:2023-09-06 02:00责任编辑:胡小海关键词:暂无标签
在工作中用Netty做了几个服务,感觉Netty做出来的程序性能好,资源占用少,但是实现Http服务比较麻烦,于是就参考Spring MVC的注解基于Netty实现了一个轻量级的RESTful框架。

该框架提供了控制器注解、全局异常控制器、拦截器等功能。

注解名称参考了Spring MVC,编译理解和记忆,主要包括如下注解:

  • @RestController
  • @RequestMapping
  • @GetMapping
  • @PostMapping
  • @DeleteMapping
  • @PutMapping
  • @PatchMapping
  • @JsonResponse
  • @RequestParam
  • @PathVariable
  • @RequestBody
  • @UploadFile
  • @UrlEncodedForm
  • @RequestHeader

Controller示例:

//默认为单例,singleton = false表示启用多例。//@RestController(singleton = false)@RestController@RequestMapping("/users")public class UserController { ???@GetMapping("") ???@JsonResponse ???public ResponseEntity<User> listUser() { ???????// 查询用户 ???????User user = new User(); ???????user.setId(1); ???????user.setName("Leo"); ???????user.setAge((short)18); ???????return ResponseEntity.ok().build(user); ???} ???@PutMapping("/{id}") ???public ResponseEntity<?> putMethod(@PathVariable("id") int id, @RequestBody String body) { ???????// 更新用户 ???????return ResponseEntity.status(HttpStatus.CREATED).build(); ???} ???@DeleteMapping("/{id}") ???public ResponseEntity<?> deleteMethod(@PathVariable int id) { ???????// 删除用户 ???????return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); ???} ???@PostMapping("") ???public ResponseEntity<?> postMethod(@RequestBody String body) { ???????// 添加用户 ???????JSONObject json = JSONObject.parseObject(body); ???????User user = new User(); ???????user.setId(json.getIntValue("id")); ???????user.setName(json.getString("name")); ???????user.setAge(json.getShortValue("age")); ???????return ResponseEntity.status(HttpStatus.CREATED).build(user); ???}}

拦截器示例:

public final class CorsInterceptor implements Interceptor { ???@Override ???public boolean preHandle(FullHttpRequest request, HttpResponse response) throws Exception { ???????// 使用axios发送cookie,这里不能用*,需要使用Web前端地址,如:http://localhost:8080 ???????// response.getHeaders().put("Access-Control-Allow-Origin", "*"); ???????response.getHeaders().put("Access-Control-Allow-Origin", System.getProperty("http.origin")); ???????response.getHeaders().put("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE, PATCH"); ???????response.getHeaders().put("Access-Control-Max-Age", "3600"); ???????response.getHeaders().put("Access-Control-Allow-Headers", "Content-Type,X-Token"); ???????response.getHeaders().put("Access-Control-Allow-Credentials", "true"); ???????return true; ???} ???@Override ???public void postHandle(FullHttpRequest request, HttpResponse response) throws Exception { ???} ???@Override ???public void afterCompletion(FullHttpRequest request, HttpResponse response) { ???}}

启动服务:

 ???@Test ???public void test() { ???????// 忽略指定url ???????WebServer.getIgnoreUrls().add("/favicon.ico"); ???????// 全局异常处理 ???????WebServer.setExceptionHandler(new ExceptionController()); ???????// 设置监听端口号 ???????WebServer server = new WebServer(2006); ???????// 设置Http最大内容长度(默认 为10M) ???????server.setMaxContentLength(1024 * 1024 * 50); ???????// 设置Controller所在包 ???????server.setControllerBasePackage("org.leo.web.controller"); ???????// 添加拦截器,按照添加的顺序执行。 ???????// 跨域拦截器 ???????server.addInterceptor(new CorsInterceptor(), "/不用拦截的url"); ???????try { ???????????server.start(); ???????} catch (InterruptedException e) { ???????????e.printStackTrace(); ???????} ???}

源码与实例程序

典型应用

基于Netty实现的RESTful框架--netty-rest-server

原文地址:http://blog.51cto.com/lining90567/2130551

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved