Spring?MVC中的常用注解及用法小結
一、建立連接
@RequestMappering可以作用在類上(類注解)、也可以作用在方法上(方法注解)。
@RequestMappering后面的括號中:雙引號的值會賦值給value這個屬性。只有一個屬性且屬性名為value時這個屬性名可以省略不寫。
@RequestMappering默認支持get/post請求,可以使用method屬性來限制請求方式。
@RequestMapping(value = "/hello/t1", method = RequestMethod.GET) public String hello(){ return "hello"; }
二、接收請求
2.1請求中帶有一個參數(shù)
@RequestMapping("/r1") public String r1(String name){ return "接收到參數(shù) name:"+name; } @RequestMapping("/r2") public String r2(Integer age){ return "接收到參數(shù) age:"+age; }
2.2請求中帶有多個參數(shù)
@RequestMapping("/r3") public String r3(String name,Integer age){//注意參數(shù)類型要寫Integer不要寫int,因為請求中沒有傳參數(shù)時則傳的參數(shù)是null,int類型的變量不能接收null return "name:"+name+",age:"+age; }
2.3用對象接收請求中的參數(shù)
public class UserInfo {//假設代碼中定義了UserInfo類 private int id; private String name; private Integer age; public UserInfo() { } public UserInfo(int id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } ... }
@RequestMapping("/r4") public String r4(UserInfo user){ return user.toString(); }
2.4對請求中的參數(shù)進行重命名
從請求中獲取name參數(shù)的值并賦值給代碼中的username參數(shù)。@RequestParam注解里加required = false則表示這個注解修飾的參數(shù)可以不傳(否則這個注解修飾的參數(shù)一定要傳),不傳時這個參數(shù)的值為null。required默認為true。
@RequestMapping("/r5") public String r5(@RequestParam(value = "name",required = false) String username, @RequestParam("age") Integer userage){ return "username:"+username+",age:"+userage; }
2.5請求參數(shù)中帶有數(shù)組
@RequestMapping("/r6") public String r6(String[] arr){ return Arrays.toString(arr)+",length:"+arr.length; }
2.6請求參數(shù)中帶有集合
默認情況下,請求中參數(shù)名相同的多個值,是封裝到數(shù)組中的。如果要封裝到集合,要使?@RequestParam綁定參數(shù)關系。
以下為綁定參數(shù)關系的同時對參數(shù)中的集合名進行重命名:
@RequestMapping("/r7") public String r7(@RequestParam(value = "list", required = false) List<String> list1){ if (list1!=null){ return list1.toString()+",size:"+list1.size(); } return "list為空"; }
2.7json字符串和Java對象互轉
以下這種轉換方式:拿到json字符串把這個json字符串轉換為java對象的時候,會調用java對象無參的構造函數(shù)構造成一個空的對象,再對字符串進行解析對空對象的屬性進行賦值。所以java對象所屬的類中如果我們自己寫了有參的構造方法則要把無參的構造方法加上。
public static void main(String[] args) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); UserInfo userInfo = new UserInfo(); userInfo.setName("lingliang"); userInfo.setAge(16); userInfo.setId(1); //對象轉json String s = objectMapper.writeValueAsString(userInfo); System.out.println(s); //json字符串轉成Java對象 UserInfo userInfo1 = objectMapper.readValue(s, UserInfo.class); System.out.println(userInfo1); }
2.8前端傳遞json數(shù)據(jù)給后端、json數(shù)據(jù)在請求正文中、后端接收json數(shù)據(jù)
@RequestMapping("/r8") public String r8(@RequestBody UserInfo userInfo){ return userInfo.toString(); }
2.9獲取url中的參數(shù)
@RequestMapping("/r9/{articleId}") public String r9(@PathVariable Integer articleId){ return "articleId:"+articleId; }
2.10獲取url中的參數(shù)并對參數(shù)進行重命名
將url中的參數(shù)name重命名為userName:
@RequestMapping("/r10/{name}/{age}") public String r10(@PathVariable("name") String userName, @PathVariable Integer age){ return "name:"+userName+",age:"+age; }
2.11上傳文件
即獲取請求中的文件。@RequestPart這個注解不寫也行,這個注解可以對file進行重命名。
@RequestMapping("/r11") public String r11(@RequestPart MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); file.transferTo(new File("D:/temp/"+fileName)); return "獲取上傳文件: "+file.getOriginalFilename(); }
三、獲取cookie和session
3.1傳統(tǒng)方式獲取cookie(可以獲取到所有的cookie)
@RequestMapping("/getCookie1") public String getCookie(HttpServletRequest request){ Cookie[] cookies = request.getCookies(); //Arrays.stream(cookies).forEach(x -> System.out.println(x.getName()+":"+x.getValue())); if (cookies!=null){ for (Cookie c: cookies){ System.out.println(c.getName()+":"+c.getValue()); } return "獲取Cookie成功"; } return "Cookie 為空"; }
3.2簡潔方式獲取cookie(可以獲取到指定的cookie)
@RequestMapping("/getCookie2") public String getCookie2(@CookieValue("byte") String byte){ return "byte:" + byte; }
3.3傳統(tǒng)方式設置session和獲取session
@RequestMapping("/setSession") public String setSession(HttpServletRequest request){ HttpSession session = request.getSession(); session.setAttribute("userName","zhangsan"); return "設置Session成功"; } @RequestMapping("/getSession1") public String getSession(HttpServletRequest request){ HttpSession session = request.getSession(); String userName = (String)session.getAttribute("userName"); return "登錄用戶:"+ userName; }
3.4簡潔方式獲取session
簡潔方式1獲取session:
@RequestMapping("/getSession2") public String getSession(HttpSession session){//如果后端還沒有session則HttpSession session會幫我們創(chuàng)建一個session,只是這個session里面沒有內容。這預防了空指針異常的出現(xiàn)。 String userName = (String)session.getAttribute("userName"); return "登錄用戶:" + userName; }
簡潔方式2獲取session:
@RequestMapping("/getSession3") public String getSession(@SessionAttribute(value = "userName", required = false) String userName){ return "登錄用戶:" + userName; }
四、獲取header
4.1傳統(tǒng)方式獲取header,可以獲取到全部header
@RequestMapping("/getHeader") public String getHeader(HttpServletRequest request){ String userAgent = request.getHeader("User-Agent"); return "userAgent:"+userAgent; }
4.2簡潔方式獲取header
這種方式想獲取到全部header則參數(shù)聲明要寫得非常長。
@RequestMapping("/getHeader2") public String getHeader2(@RequestHeader("User-Agent") String userAgent){ return "userAgent:"+userAgent; }
五、返回響應
(1)返回靜態(tài)頁面。
(2)返回數(shù)據(jù)。
(3)返回HTML片段。
(4)返回json。
(5)設置狀態(tài)碼、編碼方式、header。
元注解(即可以注解到其它注解的注解):
1)@Target({ElementType}.TYPE):表示注解的使用范圍,TYPE表示注解的使用范圍是類。
2)@Retention(RetentionPolicy.RUNTIME):表示注解的生命周期。
3)@Documented。
@RestController=@Controller+@ResponseBody。
@Controller是在告訴Spring,Spring要幫我們管理哪些程序,用@Controller修飾則默認返回的是頁面。
@ResponseBody表示返回數(shù)據(jù),其既可以修飾類又可以修飾方法,修飾類表示該類內的所有方法返回的都是數(shù)據(jù),修飾方法表示該方法返回的是數(shù)據(jù)。
@Controller //@RestController @RequestMapping("/return") public class ReturnController { @RequestMapping("/r1") public String r1(){ return "/index.html";//返回靜態(tài)頁面 } @ResponseBody @RequestMapping("/r2") public String r2(){ return "hello, spring";//返回數(shù)據(jù) } @ResponseBody @RequestMapping("/r3") public String r3(){ return "<h1>我是返回的html片段</h1>";//返回html片段 } @ResponseBody @RequestMapping("/r4") public UserInfo r4(){ UserInfo userInfo = new UserInfo(); userInfo.setId(1); userInfo.setName("lingliang"); userInfo.setAge(16); return userInfo;//返回json。當方法返回值類型為對象的時候,Spring會把響應的Content-Type自動設置為application/json。當返回的是數(shù)據(jù),方法返回值類型為String的時候,默認情況下,Spring會把響應的Content-Type自動設置為text/html。 } @ResponseBody @RequestMapping("/r5") public Map<String,String> r5(){ HashMap map = new HashMap(); map.put("k1","v1"); map.put("k2","v2"); return map;//Spring會把響應的Content-Type自動設置為application/json。 } @RequestMapping("/r6") public String r6(){ return "/a.js";//Spring會把響應的Content-Type自動設置為application/javascript。 } @RequestMapping("/r7") public String r7(){ return "/b.css";//Spring會把響應的Content-Type自動設置為text/css。 } @ResponseBody @RequestMapping("/r8") public String r8(HttpServletResponse response){ response.setStatus(401); return "設置狀態(tài)碼成功";//設置狀態(tài)碼。狀態(tài)碼不影響界面的展示。 } @ResponseBody //@RequestMapping("/r9") @RequestMapping(value = "/r9", produces = "application/json; charset=utf8")//設置響應的Content-Type,因為當返回的是數(shù)據(jù),方法返回值類型為String的時候,默認情況下,Spring會把響應的Content-Type自動設置為text/html。 public String r9(){ return "{\"OK\":1}";//返回的是一個json數(shù)據(jù)。 } @ResponseBody @RequestMapping(value = "/r10") public String r10(HttpServletResponse response){ response.setHeader("myHeader","myHeaderValue");//設置自定義的header。 return "設置header成功"; } }
到此這篇關于Spring MVC中的常用注解及其用法的文章就介紹到這了,更多相關Spring MVC常用注解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring boot如何通過@Scheduled實現(xiàn)定時任務及多線程配置
這篇文章主要介紹了Spring boot如何通過@Scheduled實現(xiàn)定時任務及多線程配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12