Java&Spring基础技术

request 参数和 controller 方法参数的绑定对应

2018-01-06  本文已影响480人  当当一丢丢

主题

@RequestParam 案例

@Requestparam 注解用来建立 方法参数(method param)与请求参数(request param)的对应关系

1. 绑定方法参数与请求参数的对应关系
@RequestMapping("/books")
//@RequestParam("category") 建立 url中 请求参数-category 和 方法参数-cat 之间的对应关系 
//注:当请求参数和方法参数同名时,可省略@RequestParam中的value 值-自动绑定
public String books(@RequestParam("category") String cat) {
    //bussiness logic
    sout("category " + cat)
    return "book.jsp";
}
2. 自动类型转换

当Request Param 不是 String类型如而是 number时,我们可自动将其转成 number类型的 method 参数

@RequestParam("category") 
//只需直接指定想要转变成的类型,如 rate 为 int,maxprice 为 BigDecimal
public String books(@RequestParam("rate") int rate, 
                        @RequestParm("maxprice") BigDecimal maxprice) {
    //bussiness logic
    sout("rate " + rate +", maxprice " + maxprice)
    return "book.jsp";
}
3. request参数为日期类型
@RequestMapping("/books")
public String books(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) 
                    @RequestParam("from") LocalDate from) {
        //首先用 @DateTimeFormat注解,而且是用其中的ISO.DATE做格式转化, DATE 标识:yyyy-MM-dd
        //再用LocalDate格式做参数,LocalDate 标识:year-month-day
        //java.util.Date:年 月 日 hh mm ss
        System.out.println("from " + from);
        return "book.jsp";
    }

4. request 参数为不必须
@RequestMapping("/books")
public String books(@RequestParam("category", required=false) String cat) {
        //@RequestParam 默认required = true,为false时 该参数不必须
        System.out.println("category " + cat);
        return "book.jsp";
    }
5. request 自带默认值, 用于以下1/2种场景
@RequestMapping("/books")
public String books(@RequestParam("category", defaultValue="history") String cat) {
        System.out.println("category " + cat);
        return "book.jsp";
}
6. @RequestParam 为List or array
@RequestMapping("/books")
public String books(@RequestParam List<String> authors) {
        System.out.println("authors " + authors);
        return "book.jsp";
}
7. @RequestParam 为Map,一个key 对应一个value值
@RequestMapping("/books")
public String books(@RequestParam Map<String, String> book) {
        
        System.out.println("book " + book);
        return "book.jsp";
}

输出:{category=math, authors=lisi}
8. @RequestParam 为MultiValueMap,一个key 对应一个多个 value 值
@RequestMapping("/books")
public String books(@RequestParam MultiValueMap<String, List<String>> book ) {
        
        System.out.println("book " + book);
        return "book.jsp";
}
输出:{category=[math], authors=[lisi, zhangsi]}
9. 不声明 @RequestParam
@RequestMapping("/books")
public String books(String category) {
        
        System.out.println("category " + category);
        return "book.jsp";
}
输出:math
建议:指明 @RequestParam
10. request 参数为field, 而 controller 参数为 Object

public class Box{
    String category;
    String author;
    getter;
    setter;
    String toString() {
        return "category=" + category +", author=" + author;
    }
}

@RequestMapping("/books")
public String books(Box box ) {
        System.out.println("box " + box);
        return "book.jsp";
}
输出:category=math, author=lisi
注意
参考:https://reversecoding.net/spring-mvc-requestparam-binding-request-parameters/#default-test
上一篇下一篇

猜你喜欢

热点阅读