1.@RequestParam
@RequestMapping("/menuQuery")
public Object meanQuery(@RequestParam Integer id){
......
......省略代碼
}
這裏寫入的參數就會從前端傳入到後端代碼中
如果不強制要求傳入參數的話,需要做如下設置
required該參數是否必須。默認爲true;
defaultValue請求參數的默認值。
@RequestMapping("/menuQuery")
public Object meanQuery(@RequestParam(required = false) Integer id){
......
......省略代碼
}
2.@RequestMapping
@RequestMapping("/menuQuery")
public Object meanQuery(){
......
......省略代碼
}
通過@RequestMapping註解可以實現前端通過訪問註解定義url地址,可以訪問到後端註解下的代碼塊.
3. @Autowired
public class MenuService {
@Autowired
MenuMapper menumapper;
...........
..........省略代碼
}
通過@Autowired註解實現的其實就是menumapper = new MenuMapper,把一個設置好的類實例化到當前類內部.
4.HttpServletRequest
HttpServletRequest與@RequestParam實現目的接收前端發送過來的數據,只不過HttpServletRequest接收的是一個封裝好的對象.
HttpServletRequest接口最常用的方法就是獲得請求中的參數,這些參數一般是客戶端表單中的數據。同時,HttpServletRequest接口可以獲取由客戶端傳送的名稱,也可以獲取產生請求並且接收請求的服務器端主機名及IP地址,還可以獲取客戶端正在使用的通信協議等信息。下表是接口HttpServletRequest的常用方法。
5.HttpServletResponse
在Servlet中,當服務器響應客戶端的一個請求時,就要用到HttpServletResponse接口。設置響應的類型可以使用setContentType()方法。發送字符數據,可以使用getWriter()返回一個對象。
下表是接口HttpServletResponse的常用方法。
5.1sendRedircet(String location)
sendRedircet(放入一個模板頁面) 他可以實現頁面的跳轉,運行到sendRedircet時,就會跳轉到括號內傳入的模板頁面
6.@RequestBody
@RequestBody主要用來接收前端傳遞給後端的json字符串中的數據的(請求體中的數據的);@RequestBody直接以String接收前端傳過來的json數據.
GET方式無請求體,所以使用@RequestBody接收數據時,前端不能使用GET方式提交數據,而是用POST方式進行提交。在後端的同一個接收方法裏,@RequestBody與@RequestParam()可以同時使用,@RequestBody最多隻能有一個,而@RequestParam()可以有多個。
注:一個請求,只有一個RequestBody;一個請求,可以有多個RequestParam。
7.@RequestParam
@RequestParam註解定義在方法傳參內,實現的是前端網頁傳入參數後發生到後端
http://localhost/account/list?pageNum=1
問號,後面的pageNum=1就是前端寫入的參數,會通過@RequestParam註解,傳遞到後端,然後在後端使用pageNum這個變量,進行相關的操作(一般是使用場景就是翻頁的實現)
@RequestMapping("/list")
public String list(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "5" ) int pageSize,Model model) {
PageInfo<Account>page = accountSrv.findByPage(pageNum,pageSize);
model.addAttribute("page", page);
return "/account/list";
}
- required:請求參數中是否必須提供此參數,默認值是true,true爲必須提供
- defaultValue:默認值
8.@ConfigurationProperties
8.1使用場景:
將大量的參數配置在 application.properties或application.yml文件中,通過 @ConfigurationProperties 註解,我們可以方便的獲取這些參數值
8.2注意:
使用時要通過添加 @Component 或者@Configuration註解讓 Component Scan 掃描到
9.@Configuration與@Bean的共同使用
@Configuration可理解爲用spring的時候xml裏面的標籤
@Bean可理解爲用spring的時候xml裏面的標籤
<beans>
<bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>
使用@Bean 註解表明MyServiceImpl需要交給Spring進行管理,做一個單例模式,這樣我們所以的線程都是共享同一個MyServiceImpl,不會出現線程安全問題
10Model
Model是放在方法的參數列表裏面,使用model.addAttribute(“供前端調用的名稱”,數據集)可以實現:從後端mysql查詢數據傳遞給前端頁面使用
@RequestMapping("/list")
public String list(Model model){
List<Account>accountList = accountSrv.findAll();//去server層獲取數據庫內容
model.addAttribute("accountList",accountList);//通過model把從數據庫獲取信息傳遞到前端
return "account/list";
}
11.PageHelper:分頁的實現
11.1controller層示例代碼
@RequestMapping("/list")
public String list(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "5" ) int pageSize,Model model) {
PageInfo<Account>page = accountSrv.findByPage(pageNum,pageSize);
//我們拿到server層返回過來的封裝好的PageInfo類型數據集,我們通過model發送給前端頁面,前端可以通過page來調用
model.addAttribute("page", page);
return "/account/list";
}
11.2service層的示例代碼
public PageInfo<Account> findByPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize); //頁碼,和每頁顯示數量
AccountExample example = new AccountExample();
List<Account> list = accMapper.selectByExample(example);
//通過傳入的數據集list,和準備分幾頁,計算一頁多少數據,做一個PageInfo的數據集返回出去
return new PageInfo<>(list, 5);
}
12.MultipartFile用戶文件上傳
MultipartFile是寫在方法傳入參數位置,通過MultipartFile實現用戶上傳文件,後端接收
//用戶上傳文件存儲的路徑應該避免中文字符,否則會報錯
@RequestMapping("/fileUploadController")
public String fileUpload (MultipartFile filename,String password) { //這裏要注意必須叫filename,要不然後面找不到MultipartFile
System.out.println("password:" + password);
System.out.println("file:" + filename.getOriginalFilename());
try {
File path = new File(ResourceUtils.getURL("classpath:").getPath());
File upload = new File(path.getAbsolutePath(), "static/upload/");
System.out.println("upload:" + upload);
filename.transferTo(new File(upload+"/"+filename.getOriginalFilename()));
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "profile";
}
上述代碼就是實現的一個文件上傳接口.一般文件上傳都按照此類進行書寫.
13.@Controller和@RestController
13.@Controller
將方法類註解爲一個可供前端調用的接口
@Controller
public class HelloController{
@RequestMapping("/hello)
@RequestBody
public String hello(){
return "hello"
}
}
13.2@RestController
@RestController他是@RequestBody與@Controller整合版,有些人嫌上述麻煩,可以使用@RestController來簡化代碼
@RestController
public class HelloController{
@RequestMapping("/hello) //這裏就少了@RequestBody,@RequestBody就被@RestController給整合了
public String hello(){
return "hello"
}
}