成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java+Netty實現(xiàn)的RESTful框架--netty-rest-server

sixgo / 2058人閱讀

摘要:在工作中用做了幾個服務,感覺做出來的程序性能好,資源占用少,但是實現(xiàn)服務比較麻煩,于是就參考的注解基于實現(xiàn)了一個輕量級的框架。該框架提供了控制器注解全局異??刂破鲾r截器等功能??缬驍r截器不用攔截的測試服務源碼與實例程序典型應用

在工作中用Netty做了幾個服務,感覺Netty做出來的程序性能好,資源占用少,但是實現(xiàn)Http服務比較麻煩,于是就參考Spring MVC的注解基于Netty實現(xiàn)了一個輕量級的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發(fā)送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());
        
        // 設置監(jiān)聽端口號
        WebServer server = new WebServer(2006);
        
        // 設置Http最大內容長度(默認 為10M)
        server.setMaxContentLength(1024 * 1024 * 50);
        
        // 設置Controller所在包
        server.setControllerBasePackage("org.leo.web.controller");
        
        // 添加攔截器,按照添加的順序執(zhí)行。
        // 跨域攔截器
        server.addInterceptor(new CorsInterceptor(), "/不用攔截的url");
        
        try {
            server.start();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
測試服務

http://localhost:2006/users

源碼與實例程序

典型應用

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/71256.html

相關文章

  • Java+Netty、Vue+Element-UI實現(xiàn)即時通信應用 leo-im

    摘要:服務和服務之間的解耦和通訊可使用內置的隊列或發(fā)布訂閱實現(xiàn),消息處理器接收到任務后,會將該任務交由線程池處理,處理后通過發(fā)送廣播或發(fā)給指定的。前端基于開發(fā),建議使用瀏覽器體驗。在線體驗測試用戶,口令均為源碼地址服務端端 之前工作接觸了幾個開源的IM產品,再加上曾經(jīng)用Netty實現(xiàn)過幾個服務,于是就有了用Netty實現(xiàn)一個IM的想法,于是用業(yè)余時間寫了一個IM,和喜歡Netty的程序員們分...

    zhaofeihao 評論0 收藏0
  • PHP 進階之路 - 后端多元化之快速切入 Java 開發(fā)

    摘要:以實現(xiàn)自己熟悉的東西為導向比如我們做后端開發(fā),首先是常用的循環(huán)迭代條件判斷增刪改成。它是由實現(xiàn)的,不保證元素的順序,也就是說所說元素插入的順序與輸出的順序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代碼:https://github.com/zhoumengka...整個項目我們我又細分了6個版本來演進,希望更加便于大家對比...

    Cristic 評論0 收藏0
  • PHP 進階之路 - 后端多元化之快速切入 Java 開發(fā)

    摘要:以實現(xiàn)自己熟悉的東西為導向比如我們做后端開發(fā),首先是常用的循環(huán)迭代條件判斷增刪改成。它是由實現(xiàn)的,不保證元素的順序,也就是說所說元素插入的順序與輸出的順序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代碼:https://github.com/zhoumengka...整個項目我們我又細分了6個版本來演進,希望更加便于大家對比...

    xi4oh4o 評論0 收藏0
  • Java面試通關要點匯總集

    摘要:本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進行詳細的剖析與解答。敬請關注服務端思維微信公眾號,獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結合自己過往的面試經(jīng)驗,整理了一些核心的知識清單,幫助讀者更好地回顧與復習 Java 服務端核心技術。本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進...

    gougoujiang 評論0 收藏0
  • 后端經(jīng)驗

    摘要:在結構上引入了頭結點和尾節(jié)點,他們分別指向隊列的頭和尾,嘗試獲取鎖入隊服務教程在它提出十多年后的今天,已經(jīng)成為最重要的應用技術之一。隨著編程經(jīng)驗的日積月累,越來越感覺到了解虛擬機相關要領的重要性。 JVM 源碼分析之 Jstat 工具原理完全解讀 http://click.aliyun.com/m/8315/ JVM 源碼分析之 Jstat 工具原理完全解讀 http:...

    i_garfileo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<