摘要:在工作中用做了几个服务,感觉做出来的程序性能好,资源占用少,但是实现服务比较麻烦,于是就参考的注解基于实现了一个轻量级的框架。该框架提供了控制器注解全局异常控制器拦截器等功能。跨域拦截器不用拦截的测试服务源码与实例程序典型应用
在工作中用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:...
阅读 2291·2021-11-24 09:38
阅读 3353·2021-11-08 13:27
阅读 3190·2021-09-10 10:51
阅读 3307·2019-08-29 12:20
阅读 754·2019-08-28 18:28
阅读 3560·2019-08-26 11:53
阅读 2805·2019-08-26 11:46
阅读 1630·2019-08-26 10:56
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要