
引言
在現(xiàn)代的Web開發(fā)中,SpringMVC已經(jīng)成為了一個(gè)非常流行和強(qiáng)大的框架。它提供了許多注解來(lái)簡(jiǎn)化開發(fā)過(guò)程,使得我們能夠更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。本文將深入探討SpringMVC的注解驅(qū)動(dòng)開發(fā),重點(diǎn)關(guān)注常用注解、參數(shù)傳遞、返回值和頁(yè)面跳轉(zhuǎn)等方面。
1. SpringMVC的常用注解
1.1 @Controller
@Controller注解用于標(biāo)識(shí)一個(gè)類是SpringMVC的控制器,它能夠處理用戶請(qǐng)求并返回相應(yīng)的結(jié)果。我們可以通過(guò)在方法上使用@RequestMapping注解來(lái)指定請(qǐng)求的URL路徑。
1.2 @RequestMapping
@RequestMapping注解用于將請(qǐng)求URL映射到相應(yīng)的處理方法上。我們可以通過(guò)指定URL路徑、請(qǐng)求方法、請(qǐng)求參數(shù)等來(lái)精確匹配請(qǐng)求。
1.3 @RequestParam
@RequestParam注解用于獲取請(qǐng)求參數(shù)的值。我們可以通過(guò)指定參數(shù)名、是否必需、默認(rèn)值等來(lái)獲取請(qǐng)求中的參數(shù)值。
1.4 @PathVariable
@PathVariable注解用于獲取URL路徑中的參數(shù)值。我們可以通過(guò)在URL路徑中使用占位符來(lái)指定參數(shù)名,并在方法參數(shù)中使用@PathVariable注解來(lái)獲取參數(shù)值。
1.5 @ResponseBody
@ResponseBody注解用于將方法的返回值直接作為響應(yīng)體返回給客戶端。它可以將對(duì)象轉(zhuǎn)換為JSON、XML等格式,并設(shè)置響應(yīng)的Content-Type。
1.6.@RequestHeader
使用 @RequestHeader 注解可以獲取指定的請(qǐng)求頭信息。如果想要獲取所有的請(qǐng)求頭信息,可以使用 Map<String,String>、MultiValueMap<String,String>、HttpHeaders 這三個(gè) Map 中的任何一個(gè)封裝所有請(qǐng)求頭的 name 和 value。
參數(shù)列表
參數(shù) | 說(shuō)明 |
---|---|
name | name 和 value 互為別名,當(dāng)只有一個(gè)參數(shù)時(shí),可以省略 value,直接(“xxx”) 就可以了 |
value | name 和 value 互為別名,當(dāng)只有一個(gè)參數(shù)時(shí),可以省略 value,直接(“xxx”) 就可以了 |
required | 默認(rèn)情況下,如果請(qǐng)求頭中缺少了指定的 name,那么將會(huì)報(bào)錯(cuò)。 如果沒有添加required = false,當(dāng)請(qǐng)求頭中沒有這個(gè)zking請(qǐng)求頭時(shí)就會(huì)報(bào)錯(cuò)。 |
defaultValue | 如果請(qǐng)求頭中缺少了指定的 name ,那么會(huì)報(bào)錯(cuò),可以使用 defaultValue 這個(gè)屬性指定默認(rèn)值,就可以避免報(bào)錯(cuò) ;如果請(qǐng)求頭缺少指定 name ,該屬性設(shè)置的值將會(huì)作為默認(rèn)值,如果該屬性不設(shè)置值,它有自己的默認(rèn)值 DEFAULT_NONE |
2. SpringMVC的參數(shù)傳遞
2.1.基礎(chǔ)類型+String
@RequestMapping("/h1")
public String h1(String bname,Integer bid){
log.info("基礎(chǔ)類型+String傳參:{},{}",bname,bid);
return "index";
}
2.2.復(fù)雜類型
@RequestMapping("/h2")
public String toHello2(Book book, HttpServletRequest req){
log.info("復(fù)雜類型傳參:{},{}", req.getParameter("bid"),req.getParameter("bname"));
log.info("復(fù)雜類型傳參:{}",book.toString());
return "index";
}
2.3.@RequestParam
@RequestMapping("/h3")
public String h3(@RequestParam Integer bid, @RequestParam(required = false) String bname){
log.info(" 使用@RequestParam注解傳遞參數(shù):{},{}", bid,bname);
return "index";
}
2.4.@PathVariable
@RequestMapping("/h4/{bid}")
public String h4(@PathVariable("bid") Integer bid){
log.info(" 使用@PathVariable注解傳遞參數(shù):{},", bid);
return "index";
}
2.5.@RequestBody
// 能接受json數(shù)據(jù),前提導(dǎo)入了Jackson依賴,沒有導(dǎo)入Jackson依賴的話那進(jìn)不了這個(gè)方法
@RequestMapping("/h5")
public String h5(@RequestBody Map map){
log.info("RequestBody:map:{}",map);
return "index";
}
// 不能接受json數(shù)據(jù)
@RequestMapping("/h6")
public String h6( Map map){
log.info("RequestBody:map:{}",map);
return "index";
}
2.6.@RequestHeader
@RequestMapping("/h7")
public String h7(Book book, @RequestBody Map map, @RequestHeader("jwt") String jwt){
log.info("book:{}",book);
log.info("RequestBody:map:{}",map);
log.info("RequestHeader:jwt:{}",jwt);
return "index";
}
3. SpringMVC的返回值
3.1 void返回
public void f1(HttpServletResponse response) throws Exception {
Map<String,Object> map = new HashMap<>();
map.put("code",200);
map.put("msg","成功");
try {
} catch (Exception e) {
ResponseUtil.writeJson(response,map);
e.printStackTrace();
}
}
@ResponseBody
@RequestMapping("/f2")
public Map f2(HttpServletResponse resvponse) {
Map<String,Object> map = new HashMap<>();
map.put("code",200);
map.put("msg","成功");
return map;
}
3.2 String返回
@RequestMapping("/index")
public String demo1(){
System.out.println("hello spring");
return "index";
}
3.3.String+Model返回
@RequestMapping("/f3")
public String f3(Model model, HttpServletRequest request){
//填充模型數(shù)據(jù)
model.addAttribute("name","張三");
request.setAttribute("role","管理員");
//邏輯視圖名
return "index";
}
<%--
Created by IntelliJ IDEA.
User: yuanh
Date: 2023/9/4
Time: 17:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
hello word
name:${name}
role:${role}
</body>
</html>
3.4.ModelAndView
@RequestMapping("/f4")
public ModelAndView f4(){
ModelAndView mv = new ModelAndView();
//填充模型數(shù)據(jù)
mv.addObject("price","19.9");
mv.setViewName("index");
//邏輯視圖名
return mv;
}
4. SpringMVC頁(yè)面跳轉(zhuǎn)
4.1 重定向
@RequestMapping("/z3")
public String z3(){
System.out.println("z3");
return "redirect:h1";
}
@RequestMapping("/z4")
public String z4(){
System.out.println("z4");
return "redirect:/main/index";
}
4.2 轉(zhuǎn)發(fā)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-696200.html
@RequestMapping("/z1")
public String z1(){
System.out.println("z1");
return "forward:h1";
}
@RequestMapping("/z2")
public String z2(){
System.out.println("z2");
return "forward:/main/index";
}
總結(jié)
本文深入探討了SpringMVC的注解驅(qū)動(dòng)開發(fā),重點(diǎn)關(guān)注了常用注解、參數(shù)傳遞、返回值和頁(yè)面跳轉(zhuǎn)等方面。通過(guò)學(xué)習(xí)和理解這些內(nèi)容,我們可以更加靈活和高效地使用SpringMVC來(lái)開發(fā)Web應(yīng)用程序。希望本文對(duì)您有所幫助!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-696200.html
到了這里,關(guān)于“深入理解SpringMVC的注解驅(qū)動(dòng)開發(fā)“的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!