精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

別只會(huì)用 @RequestMapping!Spring Boot 接口定義的八種解法大賞

開(kāi)發(fā) 前端
本文以 Spring Boot 3.4.2 為基礎(chǔ),從多種角度出發(fā),帶你認(rèn)識(shí)八種在實(shí)際開(kāi)發(fā)中可選的接口定義方式。每種方式都結(jié)合具體示例,從傳統(tǒng)控制器注解到函數(shù)式接口再到底層 Servlet 注冊(cè),不論你是想要代碼更具語(yǔ)義性,還是希望繞開(kāi) Spring MVC 的重量框架獲得更直接的控制權(quán),都能在這些方案中找到適合的實(shí)現(xiàn)。

在日常的 Spring Boot 項(xiàng)目開(kāi)發(fā)中,很多人定義接口時(shí)幾乎只會(huì)用 @RestController 搭配 @RequestMapping 或 @GetMapping、@PostMapping 等注解。久而久之,形成了路徑即控制器的固有思維模式。然而,Spring Boot 實(shí)際上為接口定義提供了遠(yuǎn)不止這一種方式。掌握多種接口聲明技巧,不僅能讓我們?cè)诿鎸?duì)不同場(chǎng)景時(shí)更加游刃有余,還能幫助團(tuán)隊(duì)構(gòu)建出更具擴(kuò)展性和清晰結(jié)構(gòu)的代碼架構(gòu)。

本文以 Spring Boot 3.4.2 為基礎(chǔ),從多種角度出發(fā),帶你認(rèn)識(shí)八種在實(shí)際開(kāi)發(fā)中可選的接口定義方式。每種方式都結(jié)合具體示例,從傳統(tǒng)控制器注解到函數(shù)式接口再到底層 Servlet 注冊(cè),不論你是想要代碼更具語(yǔ)義性,還是希望繞開(kāi) Spring MVC 的重量框架獲得更直接的控制權(quán),都能在這些方案中找到適合的實(shí)現(xiàn)。

傳統(tǒng)的 @Controller/@RestController + RequestMapping 模式

這是最常見(jiàn)的方式。

@RestController
@RequestMapping("/api")
public class ApiController {


    @GetMapping("")
    public ResponseEntity<?> query() {
        return ResponseEntity.ok(new User("Pack", 22));
    }
}

返回視圖頁(yè)面的方式:

@Controller
public class ApiController {


    @GetMapping("/home/index")
    public ModelAndView index() {
        return new ModelAndView("index");
    }
}

直接實(shí)現(xiàn) Controller 接口

這種方式有點(diǎn)像早期的 Struts Action 或原始 Servlet。

@Component("/controller/api")
public class ApiController implements Controller {


    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("<h1>直接實(shí)現(xiàn) Controller 接口</h1>");
        return null;
    }
}

適合需要直接操作請(qǐng)求和響應(yīng)對(duì)象的情況。

實(shí)現(xiàn) HttpRequestHandler 接口

更輕量的處理方式,與 Servlet 的邏輯結(jié)構(gòu)非常接近。

@Component("/handler/api")
public class HttpHandlerController implements HttpRequestHandler {


    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("<h3>實(shí)現(xiàn) HttpRequestHandler 接口</h3>");
    }
}

和 Controller 接口方式類(lèi)似,但沒(méi)有返回視圖。

注冊(cè) HttpRequestHandlerServlet 代理 HttpRequestHandler Bean

你也可以將請(qǐng)求委托給注冊(cè)的 Bean 實(shí)例處理。

@Component
public class UserHttpHandler implements HttpRequestHandler {


    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("<h3>HttpRequestHandlerServlet 代理模式</h3>");
    }
}


@Bean
public ServletRegistrationBean<HttpRequestHandlerServlet> userHandlerServlet() {
    ServletRegistrationBean<HttpRequestHandlerServlet> registrar = new ServletRegistrationBean<>();
    registrar.setServlet(new HttpRequestHandlerServlet());
    registrar.setName("userHttpHandler");
    registrar.addUrlMappings("/user/handler");
    return registrar;
}

注意:setName 要與 Bean 名稱(chēng)一致!

直接注冊(cè) HttpServlet(老派寫(xiě)法)

經(jīng)典 Servlet 的寫(xiě)法依然可行,只不過(guò)現(xiàn)在更方便了。

@Component("/products")
public class ProductServlet extends HttpServlet {


    private final ObjectMapper objectMapper;


    public ProductServlet(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }


    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("application/json;charset=utf-8");


        List<Product> products = List.of(
                new Product("Spring Boot3實(shí)戰(zhàn)案例150講", BigDecimal.valueOf(70)),
                new Product("Spring全家桶源碼詳解", BigDecimal.valueOf(70))
        );


        resp.getWriter().println(objectMapper.writeValueAsString(products));
    }


    public static record Product(String name, BigDecimal price) {}
}

默認(rèn)不能直接訪問(wèn),需額外定義適配器:

@Bean
public SimpleServletHandlerAdapter simpleServletHandlerAdapter() {
    return new SimpleServletHandlerAdapter();
}

也可使用 @WebServlet("/products") 并配合 @ServletComponentScan 啟動(dòng)掃描。

函數(shù)式接口:實(shí)現(xiàn) HandlerFunction + RouterFunction

函數(shù)式 API 適合喜歡函數(shù)編程范式的開(kāi)發(fā)者,Spring WebFlux 風(fēng)格,但在 MVC 中一樣可用。

@Component
public class StorageHandler implements HandlerFunction<ServerResponse> {


    @Override
    public ServerResponse handle(ServerRequest request) throws Exception {
        String id = request.pathVariable("id");
        return ServerResponse.ok()
                .body("庫(kù)存編號(hào)【" + id + "】的信息");
    }
}

然后注冊(cè)路由:

@Bean
public RouterFunction<ServerResponse> storageRouter(StorageHandler storageHandler) {
    return RouterFunctions.route()
            .GET("/storages/{id}", storageHandler)
            .build();
}

這種方式清晰、可組合、利于單元測(cè)試。

基于接口契約的 @HttpExchange(Http 客戶端方式)

該注解主要用于客戶端接口,但也可以作為接口規(guī)范在服務(wù)端實(shí)現(xiàn)。

@HttpExchange("/persons")
interface PersonService {


    @GetExchange("/{id}")
    Person getPerson(@PathVariable Long id);


    record Person(Long id, String name) {}
}

服務(wù)端實(shí)現(xiàn)它:

@RestController
public class PersonController implements PersonService {


    @Override
    public Person getPerson(@PathVariable Long id) {
        return new Person(id, "姓名 - " + id);
    }
}

不僅約定清晰,還能方便客戶端調(diào)用。

  • 對(duì)外開(kāi)放本地靜態(tài)資源

如需暴露本地磁盤(pán)目錄作為資源目錄,只需簡(jiǎn)單配置。

@Configuration
public class WebApiConfig implements WebMvcConfigurer {


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pack/resources/**")
                .addResourceLocations("file:/home/images/");
    }
}

這樣訪問(wèn) /pack/resources/img.jpg 就能映射到 /home/images/img.jpg 文件。

總結(jié)

Spring Boot 提供了多樣化的 Web 接口定義方式,不只是 @RequestMapping。你可以根據(jù)項(xiàng)目特點(diǎn)選擇最合適的方案:

方式

場(chǎng)景適用

@RestController

最常用,簡(jiǎn)潔快捷

Controller 接口

需要原始請(qǐng)求控制

HttpRequestHandler

精簡(jiǎn) Servlet 方式

HttpServlet 注冊(cè)

兼容傳統(tǒng) Servlet 開(kāi)發(fā)

HandlerFunction

函數(shù)式開(kāi)發(fā)、高內(nèi)聚

@HttpExchange

接口規(guī)范復(fù)用,便于客戶端調(diào)用

靜態(tài)資源

文件預(yù)覽、圖片服務(wù)等

多掌握幾種方式,不僅提升工程適應(yīng)能力,也能寫(xiě)出更優(yōu)雅靈活的接口代碼。

責(zé)任編輯:武曉燕 來(lái)源: 路條編程
相關(guān)推薦

2025-10-13 02:00:00

2025-06-09 02:00:00

項(xiàng)目技術(shù)棧Spring

2025-09-29 02:11:00

接口SpringController

2022-04-28 21:53:52

TypeScriptany類(lèi)型

2022-12-22 08:57:29

Redis數(shù)據(jù)存儲(chǔ)

2020-10-10 06:25:36

日志原理搜索

2025-06-06 08:28:56

2025-06-04 02:15:00

數(shù)據(jù)庫(kù)連接方式JDBC

2023-01-28 09:38:48

接口SpringMVC

2025-06-12 02:00:00

Spring簽到打卡

2022-08-26 01:02:31

接口privateSpring

2022-12-12 11:42:12

定義接口private

2021-04-16 11:02:40

Spring BootprivateJava

2024-06-12 12:13:48

2024-08-29 09:01:39

2025-10-11 01:25:00

Spring編程黃金模式

2021-08-31 10:26:24

存儲(chǔ)

2025-07-11 01:45:00

API監(jiān)控Spring

2024-07-10 11:40:15

2025-02-12 08:47:07

SpringAPI接口
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

一区二区亚洲欧洲国产日韩| 亚洲一卡二卡三卡四卡| 国产精品视频网| 97在线观看免费高| 国产精品久久久网站| 亚洲免费观看高清| 欧美极品日韩| 99er热精品视频| 99热在线精品观看| 中文字幕日韩欧美在线| 亚洲国产精品第一页| 美女写真久久影院| 亚洲国产一区二区三区青草影视| 日本中文不卡| 好吊色一区二区三区| 日韩av网站免费在线| 欧美国产中文字幕| 黄色国产在线播放| 久久97久久97精品免视看秋霞| 欧美日韩在线播放三区四区| 人人妻人人做人人爽| 2019中文字幕在线视频| 99视频精品全部免费在线| 国产精品日韩电影| 成年人小视频网站| 欧美精品在线看| 一级片黄色免费| 悠悠资源网亚洲青| 亚洲色欲色欲www在线观看| 久久riav| 欧美在线精品一区二区三区| 美女视频第一区二区三区免费观看网站| 欧美大片在线免费观看| 国产一二三av| 欧美久久综合网| 日韩国产一区三区| jjzz黄色片| 成人日韩视频| 欧美无人高清视频在线观看| 91视频 -- 69xx| 欧美人与性动交α欧美精品济南到 | 国产亚洲欧洲高清| 国产精品嫩草av| av成人资源| 日韩午夜电影av| 中文字幕 欧美日韩| 日韩欧美一区二区三区在线观看| 性欧美疯狂xxxxbbbb| 一级黄色片播放| 麻豆免费在线观看| 国产精品短视频| 亚洲国产欧洲综合997久久| 黄色美女网站在线观看| 91香蕉视频污在线| 免费日韩av电影| 四虎影视精品成人| 91免费版在线| 免费精品视频一区二区三区| 亚洲av电影一区| 91在线观看下载| 久久久久久久久久久久久9999| 人妻无码一区二区三区久久99| 国产经典欧美精品| 岛国一区二区三区高清视频| 国产av无码专区亚洲a∨毛片| 精品一区二区在线播放| 成人乱人伦精品视频在线观看| 亚洲天堂avav| 国产真实乱偷精品视频免| 成人午夜在线视频一区| 国产女人18毛片水真多| 国产ts人妖一区二区| 国产精品白丝jk白祙| 亚州男人的天堂| 久久久久久亚洲综合影院红桃| 日韩和欧美的一区二区| 日本韩国在线视频爽| 亚洲视频你懂的| 隔壁人妻偷人bd中字| 天堂av中文在线观看| 欧美亚洲一区三区| 91性高潮久久久久久久| 9国产精品午夜| 亚洲人成自拍网站| 久久国产波多野结衣| 一区在线免费| 国产精品久久久久久久久影视 | 国产精品区免费视频| 天天干天天摸天天操| 日本一区二区三区久久久久久久久不 | 久久午夜夜伦鲁鲁一区二区| 啪啪av大全导航福利综合导航| 日韩美女主播在线视频一区二区三区| 亚洲麻豆一区二区三区| 在线视频亚洲专区| 美女国内精品自产拍在线播放| 国产在线观看你懂的| 日韩电影在线免费观看| 亚洲中国色老太| 男人天堂网在线视频| 欧美精彩视频一区二区三区| 黄色录像特级片| 成人av三级| 欧美成人性战久久| 波多野在线播放| 欧美涩涩视频| 国产精品免费一区豆花| 丰满肉嫩西川结衣av| 国产欧美日韩综合| 天堂8在线天堂资源bt| 99蜜月精品久久91| 亚洲精品av在线| 国产三级精品三级观看| 午夜一级久久| av一区二区三区在线观看| 理论在线观看| 亚洲成av人片| 一级日本黄色片| 欧美丝袜激情| 91地址最新发布| www.xxxx国产| 国产精品麻豆99久久久久久| 欧美二区在线视频| 亚洲小说春色综合另类电影| 一区二区三区四区在线观看视频 | 色综合久久久久| 91香蕉视频在线观看视频| 啪啪亚洲精品| 国内精品久久久久久久| 国产美女免费视频| 中文一区一区三区高中清不卡| 欧美,日韩,国产在线| 精品国产亚洲一区二区三区大结局| 一区二区三区四区在线观看视频| 一级片中文字幕| 成人黄色大片在线观看| a级黄色片网站| 福利精品在线| 一区二区三区视频免费在线观看| 日产精品久久久| 成人18精品视频| 欧美中文字幕在线观看视频| 国产精品欧美一区二区三区不卡| 久久精品视频亚洲| 91成品人影院| 亚洲欧美一区二区视频| 久久婷婷综合色| 成人影院在线| 国产精品视频xxxx| av基地在线| 欧美唯美清纯偷拍| 国产成人精品视频免费| 麻豆一区二区三区| 亚洲图片欧洲图片日韩av| 成人国产精品入口免费视频| 国产亚洲精品va在线观看| 日韩在线视频不卡| 国产午夜精品一区二区三区视频 | 中文日产幕无线码一区二区| 亚洲精品久久视频| 福利网址在线观看| 欧美激情一区二区三区不卡| 在线黄色免费观看| 国产精品久久久久久麻豆一区软件 | 亚洲 欧洲 日韩| 另类一区二区| 久久亚洲精品一区二区| www香蕉视频| 亚洲大尺度视频在线观看| 一区二区免费在线观看视频| 亚洲一区二区免费看| 午夜老司机精品| 日本欧美在线| 色综合久久88| 天天影院图片亚洲| 欧美性xxxxx极品少妇| 五月天免费网站| 国产精品一区在线观看你懂的| 男人添女荫道口喷水视频| 青草久久视频| 国产精品综合不卡av| www视频在线免费观看| 亚洲国产精品悠悠久久琪琪| 成人h动漫精品一区二区下载| 国产精品进线69影院| 女同性αv亚洲女同志| 宅男噜噜噜66国产日韩在线观看| 欧美一区二区三区电影在线观看| 日韩亚洲国产免费| 国内精品一区二区三区| 国产精品麻豆一区二区三区| 欧美顶级少妇做爰| 日本一级淫片免费放| 国产精品久久二区二区| 2025中文字幕| 毛片一区二区三区| 日本中文字幕网址| 99视频精品全国免费| 极品校花啪啪激情久久| 日本久久一区| 欧美有码在线观看视频| 18网站在线观看| 亚洲免费av网址| 国产激情视频在线播放 | 97成人在线观看视频| 99热国内精品| 欧美一区二区在线| 高潮久久久久久久久久久久久久| 国产精品福利小视频| 丁香影院在线| 日韩视频在线一区| 你懂的在线免费观看| 日韩精品一区二区三区老鸭窝 | 制服丝袜中文字幕亚洲| 欧美一级特黄视频| 樱花草国产18久久久久| 国产欧美一区二区三区在线观看视频| 高清国产午夜精品久久久久久| 激情视频免费网站| 国产精品亚洲综合色区韩国| 成人手机在线播放| 99成人超碰| 日本精品一区二区三区不卡无字幕| 6080成人| 91精品在线国产| 国产91亚洲精品久久久| 日本亚洲精品在线观看| 俺来俺也去www色在线观看| 久久在线观看视频| 天堂中文а√在线| 宅男66日本亚洲欧美视频| 日本国产在线| 亚洲国产成人爱av在线播放| 成人av一区二区三区在线观看| 欧美视频中文字幕| 亚洲精品91天天久久人人| 精品毛片网大全| 日本一级一片免费视频| 欧美一级做性受免费大片免费| 欧美日韩免费在线视频| 中文字幕日本视频| 色八戒一区二区三区| 成人毛片18女人毛片| 亚洲国产成人av好男人在线观看| 久久久久久国产精品视频| 亚洲另类在线制服丝袜| 日本中文在线视频| 亚洲精品伦理在线| 久久黄色免费网站| 亚洲一区二区影院| 国产亚洲精品久久久久久打不开| 一区二区国产视频| 国产无码精品在线播放| 偷拍亚洲欧洲综合| 欧美另类一区二区| 欧美性极品xxxx娇小| 探花视频在线观看| 在线免费亚洲电影| 在线亚洲欧美日韩| 3d动漫精品啪啪一区二区竹菊| 国产露脸无套对白在线播放| 欧美一区二区三区视频在线 | 手机在线观看av| 欧美一区二区三区免费观看| 超碰国产一区| 国产精品一二三在线| 电影中文字幕一区二区| 粉嫩av四季av绯色av第一区| 秋霞影视一区二区三区| 欧美一区二区影视| 五月天久久网站| 97免费视频观看| 久久精品男女| 激情五月婷婷基地| 成人成人成人在线视频| 亚洲av无码国产精品麻豆天美| 国产精品久久久久久妇女6080| 午夜剧场免费在线观看| 午夜精品久久久久久久99樱桃| 欧美a视频在线观看| 7777精品伊人久久久大香线蕉最新版 | 青草在线视频| 日本精品视频网站| 成人黄色理论片| 国产精品xxx在线观看www| 国产精品免费不| 国产午夜精品视频一区二区三区| 99精品国产福利在线观看免费| 免费大片在线观看| 国产在线不卡一区| 双性尿奴穿贞c带憋尿| 国产精品女主播av| 国产一级在线播放| 欧美日韩你懂得| 午夜福利理论片在线观看| www国产精品视频| 牛牛精品一区二区| 成人在线激情视频| 天堂俺去俺来也www久久婷婷| 9999在线观看| 免费欧美在线| 日本女人性视频| 中文字幕不卡在线观看| 国产无码精品在线播放| 538在线一区二区精品国产| 欧美 日韩 综合| 俺去啦;欧美日韩| 亚洲欧美一区二区三区| 亚洲精品免费网站| 精品理论电影| 国产精品自拍片| 国产精品一二三| 日韩在线观看免| 91高清视频在线| 午夜av免费观看| 久久久欧美一区二区| 91麻豆精品| 无遮挡亚洲一区| 国产精品一二| 国产高清成人久久| 樱桃视频在线观看一区| 国产一区二区在线不卡| 国产亚洲一区二区在线| 樱桃视频成人在线观看| 国产精品国模大尺度私拍| 久久精品亚洲人成影院| 天天影视综合色| 久久蜜桃香蕉精品一区二区三区| 久久在线视频精品| 日韩欧美一区二区不卡| 免费黄色在线| 国产精品亚洲视频在线观看| 九一成人免费视频| 黄色片视频在线播放| 91欧美激情一区二区三区成人| 精品肉丝脚一区二区三区| 日韩一区二区精品| av网站大全在线| 92国产精品久久久久首页 | 中文字幕免费精品一区| 成人软件在线观看| 欧美一区少妇| 日本欧美大码aⅴ在线播放| www.av天天| 色婷婷狠狠综合| 黄色影院在线播放| 国产成人综合精品在线| 国产亚洲一区二区三区啪| 国产福利视频在线播放| 久久免费美女视频| 一级片视频在线观看| 亚洲欧洲视频在线| 三级成人黄色影院| 亚洲精品久久久久久一区二区| 蜜臀久久久久久久| 亚洲视频重口味| 欧美一区二区在线不卡| av大全在线| 国产精品国产精品国产专区蜜臀ah| 亚洲视频日本| 特级西西人体wwwww| 日本道免费精品一区二区三区| 黄色av网址在线免费观看| 国产精品极品在线| 亚洲国产精品91| 怡红院一区二区| 色呦呦一区二区三区| av成人手机在线| 91在线视频免费| 伊人久久亚洲热| 中国毛片在线观看| 欧美精品国产精品| 青青草原国产在线| 久久久久国产精品视频| 美日韩一区二区三区| avove在线播放| 日韩电影大全免费观看2023年上 | 91午夜在线播放| 亚洲第一毛片| 在线小视频你懂的| 91精品国产免费久久综合| 女同视频在线观看| 欧美中日韩免费视频| 韩国成人在线视频| 九九热国产视频| 色悠悠久久88| 国产精品jk白丝蜜臀av小说| 成人黄色一区二区| 一区二区三区四区蜜桃| 黄视频在线观看免费| 2014亚洲精品| 日韩激情一区二区| 丁香花五月激情| 亚洲人成自拍网站| 9999久久久久| 青青草精品视频在线观看| 夜夜嗨av一区二区三区中文字幕| 黄色av免费在线看| αv一区二区三区| 奇米影视一区二区三区小说|