2022年2月11日 星期五

Spring Boot web 專案 Controller RequestParam 和 PathVariable annotation


@RequestParam 和 @PathVariable 註解是用於從request中接收請求的,兩個都可以接收引數,關鍵點不同的是@RequestParam 是從request裡面拿取值,
而 @PathVariable 是從一個URI模板裡面來填充



一、@PathVariable 的使用
PathVariable 有三個參數方法可用
name-要绑定到的路徑變量的名稱
required-指示是否為必需參數
value-名稱的别名(做用跟name一樣)
圖1 



二、@PathVariable的參數  name 及 value測試
pathVariableTest1 : 
@PathVariable不指定name 及 value,使用預設的參數名稱。
{id}的id ,需要跟String id的id 一樣。
@GetMapping("/test1/{id}")
    public String pathVariableTest1( @PathVariable String id) {

pathVariableTest2 :
@PathVariable(name="id")指定name ,對應到Mapping的{id}
@GetMapping("/test2/{id}")
    public String pathVariableTest2( @PathVariable(name="id") String bookId) {
pathVariableTest3 :
@PathVariable(value="id")指定value ,對應到Mapping的{id}
@GetMapping("/test3/{id}")
    public String pathVariableTest3( @PathVariable(value="id") String bookId) {
圖2
 


測試 pathVariableTest1
http://localhost:8080/books/test1/123
圖3


測試 pathVariableTest3
http://localhost:8080/books/test2/123
圖4


測試 pathVariableTest3
http://localhost:8080/books/test3/123
圖5


三、 @PathVariable的參數  required 設定參數是否為必需

required 不設定預設為true
true為必需的,false則非必需的。
本文測試 name 為必需, id 非必需的
案例如下: 
    @GetMapping(value={"/test4/{name}","/test4/{name}/{id}"})
    public String pathVariableTest4(@PathVariable String name, @PathVariable(required = false) String id) {
圖6

圖7 測試 pathVariableTest4 http://localhost:8080/books/test4/java



圖8 測試 pathVariableTest4 http://localhost:8080/books/test4/java/123456




四、 @PathVariable的多參數應用
可以多參數,本文測試二個測試。
可用符號分開如:/test5/{id}-{name}-{price}"
@GetMapping("/test5/{id}-{name}-{price}")
    public String pathVariableTest5( @PathVariable(value="id") String bookId,
                                     @PathVariable String name,
                                     @PathVariable String price) {
大多專案會使用如下:
@GetMapping("/test6/{id}/{name}/{price}")
    public String pathVariableTest6( @PathVariable(value="id") String bookId,
                                     @PathVariable String name,
                                     @PathVariable String price) {

圖9 程式

圖10 測試  http://localhost:8080/books/test6/123456-java-123

圖11 測試  http://localhost:8080/books/test6/123456/java/123


五、@PathVariable 將參數轉為 map 應用
使用測試程式如下:
@GetMapping(value = "/test8/{id}/{name}")
    public String pathVariableTest8(@PathVariable Map<String, String> bookMsp) {
圖12 程式

圖13 測試 http://localhost:8080/books/test8/123456/java






六、@RequestParam  的使用 

使用@RequestParam ,URL是這樣的:http://host:port/path?參數名1=參數值1&參數名2=參數值2

@RequestParam 有四個參數方法可以 value 、 name 、required、defaultValue
value 、 name 、required 方法跟 @PathVariable功能一樣。
defaultValue 當 required 為false時,給預設值的設定。
圖14


程式:
@GetMapping("/test10/list")
    public String requestParamTest10(@RequestParam String name, @RequestParam String id) {
圖15 



圖16 測試 http://localhost:8080/books/test10/list?name=test&id=123



七、@RequestParam  的參數放入request body裡傳送
在網頁上會有表單,會使用html form submit的。
而傳送資料就是放入request body裡。
本文使用psot來測試
@PostMapping("/test11/list")
    public String requestParamTest11(@RequestParam String name, @RequestParam String id) {
圖17

使用post
圖18

使用get
圖19 測試 http://localhost:8080/books/test10/list

八、同一個方法使用 @PathVariable 跟 @RequestParam 
是可以的。
程式:
   @GetMapping("/test12/{id}/{name}")
    public String pathVariableTest12(@PathVariable(value = "id") String bookId,
                                    @PathVariable String name,
                                    @RequestParam String price) {
圖20

圖21


九、測試@RequestParam 的 defaultValue
當 required 為false時,給預設值的設定。
程式:
@GetMapping("/test13/{id}/{name}")
    public String pathVariableTest13(@PathVariable(value = "id") String bookId,
                                     @PathVariable String name,
                                     @RequestParam(required=false,defaultValue="99") String price) {
 
圖22 設定 price 非必要參數 如果沒給值,就用預設值

圖23 price 參數傳入12

圖24 取消 price 傳入值




















用LINE傳送分享








其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...