欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Solon?MVC?的?@Mapping?用法示例說明

 更新時間:2024年11月18日 09:13:38   作者:帶刺的坐椅  
SolonMvc框架中的@Mapping注解用于請求路徑映射,支持加在public方法或類上,它可以自定義路徑、請求方法、內容類型等,支持多種路徑映射表達式和參數(shù)注入方式,本文給大家介紹Solon MVC的@Mapping?用法示例說明,感興趣的朋友一起看看吧

在 Solon Mvc 里,@Mapping 注解一般是配合 @Controller 和 @Remoting,作請求路徑映射用的。且,只支持加在 public 函數(shù) 或 類上。

1、注解屬性

屬性說明備注
value路徑與 path 互為別名
path路徑與 value 互為別名
method請求方式限定(def=all)可用 @Post、@Get 等注解替代此屬性
consumes指定處理請求的提交內容類型可用 @Consumes 注解替代此屬性
produces指定返回的內容類型可用 @Produces 注解替代此屬性
multipart申明支持多分片請求(def=false)如果為false,則自動識別

當 method=all,即不限定請求方式

2、支持的路徑映射表達式

符號說明示例
**任意字符、不限段數(shù)** 或 /user/**
*任意字符/user/*
?可有可無/user/?
/路徑片段開始符和間隔符/ 或 /user
{name}路徑變量申明/user/{name}

路徑組合(控制器映射與動作映射)及應用示例:

import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
@Mapping("/user") //或 "user",開頭自動會補"/"
@Controller
public void DemoController{
    @Mapping("") //=/user
    public void home(){ }
    @Mapping("/") //=/user/,與上面是有區(qū)別的,注意下。
    public void home2(){ }
    @Mapping("/?") //=/user/ 或者 /user,與上面是有區(qū)別的,注意下。
    public void home3(){ }
    @Mapping("list") //=/user/list ,間隔自動會補"/"
    public void getList(){ }
    @Mapping("/{id}") //=/user/{id}
    public void getOne(long id){ }
    @Mapping("/ajax/**") //=/user/ajax/**
    public void ajax(){ }
}

提醒:一個 @Mapping 函數(shù)不支持多個路徑的映射

3、參數(shù)注入

非請求參數(shù)的可注入對象:

類型說明
Context請求上下文(org.noear.solon.core.handle.Context)
Locale請求的地域信息,國際化時需要
ModelAndView模型與視圖對象(org.noear.solon.core.handle.ModelAndView)

支持請求參數(shù)自動轉換注入:

  • 當變量名有對應的請求參數(shù)時(即有名字可對上的請求參數(shù))
    • 會直接嘗試對請求參數(shù)值進行類型轉換
  • 當變量名沒有對應的請求參數(shù)時
    • 當變量為實體時:會嘗試所有請求參數(shù)做為屬性注入
    • 否則注入 null

支持多種形式的請求參數(shù)直接注入:

  • queryString
  • form-data
  • x-www-form-urlencoded
  • path
  • json body

其中 queryString, form-data, x-www-form-urlencoded, path 參數(shù),支持 ctx.param() 接口統(tǒng)一獲取。

import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.ModelAndView;
import org.noear.solon.core.handle.UploadedFile;
import java.util.Locale;
@Mapping("/user") 
@Controller
public void DemoController{
    //非請求參數(shù)的可注入對象
    @Mapping("case1")
    public void case1(Context ctx, Locale locale , ModelAndView mv){ }
    //請求參數(shù)(可以是散裝的;支持 queryString, form;json,或支持的其它序列化格式)
    @Mapping("case2")
    public void case2(String userName, String nickName, long[] ids, List<String> names){ }
    //請求參數(shù)(可以是整裝的結構體;支持 queryString, form;json,或支持的其它序列化格式Mapping
    @Mapping("case3")
    public void case3(UserModel user){ }
    //也可以是混搭的
    @Mapping("case4")
    public void case4(Context ctx, UserModel user, String userName){  }
    //文件上傳    //注意與 <input type='file' name="file1" /> 名字對上
    @Mapping("case5")
    public void case5(UploadedFile file1, UploadedFile file2){ } 
    //同名多文件上傳
    @Mapping("case6")
    public void case6(UploadedFile[] file){ }  
}

提醒: ?user[name]=1&ip[0]=a&ip[1]=b&order.id=1 風格的參數(shù)注入,需要引入插件:solon-serialization-properties

4、帶注解的參數(shù)注入

注解:

注解說明
@Param注入請求參數(shù)(包括:query-string、form)。起到指定名字、默認值等作用
@Header注入請求 header
@Cookie注入請求 cookie
@Path注入請求 path 變量(因為框架會自動處理,所以這個只是標識下方便文檔生成用)
@Body注入請求體(一般會自動處理。僅在主體的 String, InputSteam, Map 時才需要)

注解相關屬性:

屬性說明適用注解
value參數(shù)名字@Param, @Header, @Cookie, @Path
name參數(shù)名字(與 value 互為別名)@Param, @Header, @Cookie, @Path
required必須的@Param, @Header, @Cookie, @Body
defaultValue默認值@Param, @Header, @Cookie, @Body
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.annotation.Header;
import org.noear.solon.annotation.Body;
import org.noear.solon.annotation.Path;
@Mapping("/user") 
@Controller
public void DemoController{
    @Mapping("case1")
    public void case1(@Body String bodyStr){   }
    @Mapping("case2")
    public void case2(@Body Map<String,String> paramMap, @Header("Token") String token){ }
    @Mapping("case3")
    public void case3(@Body InputStream stream, @Cookie("Token") token){  }
    //這個用例加不加 @Body 效果一樣
    @Mapping("case4")
    public void case4(@Body UserModel user){  } 
    @Mapping("case5/{id}")
    public void case5(String id){  }
    //如果名字不同,才有必要用 @Path //否則是自動處理(如上)
    @Mapping("case5_2/{id}")
    public void case5_2(@Path("id") String name){  } 
    @Mapping("case6")
    public void case6(String name){ }
    //如果名字不同,才有必要用 @Param //否則是自動處理(如上)
    @Mapping("case6_2")
    public void case6_2(@Param("id") String name){ } 
    //如果要默認值,才有必要用 @Param
    @Mapping("case6_3")
    public void case6_3(@Param(defaultValue="world") String name){ }
    @Mapping("case7")
    public void case7(@Header String token){ }
    @Mapping("case7_2")
    public void case7_2(@Header String[] user){ } //v2.4.0 后支持
}

5、請求方式限定

可以1個或多個加個 @Mppaing 注解上,用于限定請求方式(不限,則支持全部請求方式)

請求方式限定注解說明
@Get限定為 Http Get 請求方式
@Post限定為 Http Post 請求方式
@Put限定為 Http Put 請求方式
@Delete限定為 Http Delete 請求方式
@Patch限定為 Http Patch 請求方式
@Head限定為 Http Head 請求方式
@Options限定為 Http Options 請求方式
@Trace限定為 Http Trace 請求方式
@Http限定為 Http 所有請求方式
@Message限定為 Message 請求方式
@To標注轉發(fā)目標
@WebSokcet限定為 WebSokcet 請求方式
@Sokcet限定為 Sokcet 請求方式
@All允許所有請求方式(默認)
其它限定注解說明
@Produces申明輸出內容類型
@Consumes申明輸入內容類型(當輸出內容類型未包函 @Consumes,則響應為 415 狀態(tài)碼)
@Multipart顯式申明支持 Multipart 輸入

例:

import org.noear.solon.boot.web.MimeType;
@Mapping("/user") 
@Controller
public void DemoController{
    @Get
    @Mapping("case1")
    public void case1(Context ctx, Locale locale , ModelAndView mv){ }
    //也可以直接使用 Mapping 的屬性進行限定。。。但是沒使用注解的好看
    @Mapping(path = "case1_2", method = MethodType.GET)
    public void case1_2(Context ctx, Locale locale , ModelAndView mv){ }
    @Put
    @Message
    @Mapping("case2")
    public void case2(String userName, String nickName){ }
    //如果沒有輸出申明,側 string 輸出默認為 "text/plain"
    @Produces(MimeType.APPLICATION_JSON_VALUE)
    @Mapping("case3")
    public String case3(){
        return "{code:1}";
    }
    ////也可以直接使用 Mapping 的屬性進行限定。。。但是沒使用注解的好看
    @Mapping(path= "case3_2", produces=MimeType.APPLICATION_JSON_VALUE))
    public String case3_2(){
        return "{code:1}";
    }
    //如果沒有輸出申明,側 object 輸出默認為 "application/json"
    @Mapping("case3_3")
    public User case3_3(){
        return new User();
    }
}

6、輸出類型

@Mapping("/user") 
@Controller
public void DemoController{
    //輸出視圖與模型,經后端渲染后輸出最終格式
    @Maping("case1")
    public ModelAndView case1(){
        ModelAndView mv = new ModelAndView();
        mv.put("name", "world");
        mv.view("hello.ftl");
        return mv;
    }
    //輸出結構體,默認會采用josn格式渲染后輸出
    @Maping("case2")
    public UserModel case2(){
        return new UserModel();
    }
    //輸出下載文件
    @Maping("case3")
    public Object case3(){
        return new File(...); //或者 return new DownloadedFile(...);
    }
}

7、父類繼承支持

@Mapping("user")
public void UserController extends CrudControllerBase<User>{
}
public class CrudControllerBase<T>{
    @Post
    @Mapping("add")
    public void add(T t){
        ...
    }
    @Delete
    @Mapping("remove")
    public void remove(T t){
        ...
    }
}

到此這篇關于Solon MVC 的 @Mapping 用法示例說明的文章就介紹到這了,更多相關Solon MVC @Mapping 用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • java實現(xiàn)聯(lián)機五子棋

    java實現(xiàn)聯(lián)機五子棋

    這篇文章主要為大家詳細介紹了java實現(xiàn)聯(lián)機五子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java超詳細大文件分片上傳代碼

    Java超詳細大文件分片上傳代碼

    文件上傳是一個很常見的功能。在項目開發(fā)過程中,我們通常都會使用一些成熟的上傳組件來實現(xiàn)對應的功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • String s = new String(''a '') 到底產生幾個對象

    String s = new String(''a '') 到底產生幾個對象

    這篇文章主要介紹了String s = new String(" a ") 到底產生幾個對象,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 在Java8中構建Stream流的多種方式詳解

    在Java8中構建Stream流的多種方式詳解

    當我們處理集合數(shù)據(jù)時,往往需要對其進行各種操作,如過濾、映射、排序、歸約等,在 Java 8 中引入的 Stream 流為我們提供了一種更加簡潔和靈活的方式來處理數(shù)據(jù),本文將介紹如何基于 Stream 構建流,為你展示創(chuàng)建和操作流的多種方法
    2023-08-08
  • Java中的jinfo命令使用詳解

    Java中的jinfo命令使用詳解

    jinfo是JDK提供的一個可以實時查看Java虛擬機各種配置參數(shù)和系統(tǒng)屬性的命令行工具,本文給大家介紹下Java中的jinfo命令使用,感興趣的朋友一起看看吧
    2022-03-03
  • 如何利用Java實現(xiàn)MySQL的數(shù)據(jù)變化監(jiān)聽

    如何利用Java實現(xiàn)MySQL的數(shù)據(jù)變化監(jiān)聽

    在高并發(fā)和大數(shù)據(jù)環(huán)境下,實時獲取?MySQL?數(shù)據(jù)庫的增量變化對數(shù)據(jù)同步、數(shù)據(jù)分析、緩存更新等場景至關重要,下面我們就來看看如何通過Java實現(xiàn)MySQL的數(shù)據(jù)變化監(jiān)聽吧
    2025-02-02
  • Java實現(xiàn)轉換圖片格式的示例代碼

    Java實現(xiàn)轉換圖片格式的示例代碼

    在日常的軟件開發(fā)中,處理圖像文件是一項常見任務,這篇文章將實現(xiàn)實現(xiàn)一個簡單的Java程序,用于將一種圖片格式轉換為另一種格式,需要的可以了解下
    2025-02-02
  • Java實現(xiàn)TopK問題的方法

    Java實現(xiàn)TopK問題的方法

    這篇文章主要介紹了Java實現(xiàn)TopK問題的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • springboot與dubbo的版本匹配問題

    springboot與dubbo的版本匹配問題

    這篇文章主要介紹了springboot與dubbo的版本匹配問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Mybatis-Plus的saveOrUpdateBatch(null)問題及解決

    Mybatis-Plus的saveOrUpdateBatch(null)問題及解決

    這篇文章主要介紹了Mybatis-Plus的saveOrUpdateBatch(null)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論