摘要:在工作中用做了几个服务,感觉做出来的程序性能好,资源占用少,但是实现服务比较麻烦,于是就参考的注解基于实现了一个轻量级的框架。该框架提供了控制器注解全局异常控制器拦截器等功能。跨域拦截器不用拦截的测试服务源码与实例程序典型应用
在工作中用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拦截器示例: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(); } }测试服务
http://localhost:2006/users
源码与实例程序
典型应用
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71256.html
摘要:服务和服务之间的解耦和通讯可使用内置的队列或发布订阅实现,消息处理器接收到任务后,会将该任务交由线程池处理,处理后通过发送广播或发给指定的。前端基于开发,建议使用浏览器体验。在线体验测试用户,口令均为源码地址服务端端 之前工作接触了几个开源的IM产品,再加上曾经用Netty实现过几个服务,于是就有了用Netty实现一个IM的想法,于是用业余时间写了一个IM,和喜欢Netty的程序员们分...
摘要:以实现自己熟悉的东西为导向比如我们做后端开发,首先是常用的循环迭代条件判断增删改成。它是由实现的,不保证元素的顺序,也就是说所说元素插入的顺序与输出的顺序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代码:https://github.com/zhoumengka...整个项目我们我又细分了6个版本来演进,希望更加便于大家对比...
摘要:以实现自己熟悉的东西为导向比如我们做后端开发,首先是常用的循环迭代条件判断增删改成。它是由实现的,不保证元素的顺序,也就是说所说元素插入的顺序与输出的顺序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代码:https://github.com/zhoumengka...整个项目我们我又细分了6个版本来演进,希望更加便于大家对比...
摘要:本文会以引出问题为主,后面有时间的话,笔者陆续会抽些重要的知识点进行详细的剖析与解答。敬请关注服务端思维微信公众号,获取最新文章。 原文地址:梁桂钊的博客博客地址:http://blog.720ui.com 这里,笔者结合自己过往的面试经验,整理了一些核心的知识清单,帮助读者更好地回顾与复习 Java 服务端核心技术。本文会以引出问题为主,后面有时间的话,笔者陆续会抽些重要的知识点进...
摘要:在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁入队服务教程在它提出十多年后的今天,已经成为最重要的应用技术之一。随着编程经验的日积月累,越来越感觉到了解虚拟机相关要领的重要性。 JVM 源码分析之 Jstat 工具原理完全解读 http://click.aliyun.com/m/8315/ JVM 源码分析之 Jstat 工具原理完全解读 http:...
阅读 2178·2021-11-24 09:38
阅读 3242·2021-11-08 13:27
阅读 3083·2021-09-10 10:51
阅读 3143·2019-08-29 12:20
阅读 663·2019-08-28 18:28
阅读 3459·2019-08-26 11:53
阅读 2706·2019-08-26 11:46
阅读 1515·2019-08-26 10:56