背景:因?yàn)槭褂肧wagger測(cè)試需要手動(dòng)指定傳入的參數(shù),但是session和model這種東西基本不可能靠手敲來(lái)實(shí)現(xiàn),所以需要把他們從方法的參量表中移走,令辟一條路實(shí)現(xiàn)他們。
在控制器中使用構(gòu)造器傳入HttpSession對(duì)象:
private final HttpSession session;
public XXXController(HttpSession session) {
this.session = session;
}
之后就可以在這個(gè)控制器中的任意類訪問(wèn)session了。
不用Spring MVC的方法傳入?yún)?shù)(..., Model model)將某個(gè)對(duì)象放入model中的方法
用注解"@ModelAttribute()",這里直接放代碼,自己看吧。
package controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/user")
@Api("訪問(wèn)用戶的API")
public class UserController {
/**
* 訪問(wèn){ServerRoot}/user/{username},
* 轉(zhuǎn)發(fā)至用戶詳情頁(yè),
* 詳情頁(yè)用model傳入的用戶名在GET {ServerRoot}/users/{username},
* 異步加載用戶實(shí)體對(duì)應(yīng)JSON對(duì)應(yīng)對(duì)象,
* 再由Vue.js繪制至DOM組件
* @param username 地址傳入的請(qǐng)求用戶名
* @return 需要映射的頁(yè)面地址到視圖解析器
*/
@GetMapping(value = "/{username}")
@ApiOperation(value = "獲取用戶名為{username}的詳細(xì)信息")
@ApiImplicitParam(name = "username", dataType = "String", paramType = "path")
public String userInfo(@PathVariable(value = "username") @ModelAttribute(value = "username") String username) {
// 怎么把username傳到info頁(yè),info頁(yè)再通過(guò)它使用Ajax從UsersController::getUserInfo加載用戶信息,model?
return "user/info";
}
}
這里的效果就是把地址傳過(guò)來(lái)的變量username放入model。
注:這個(gè)注解有別的用法,但是不再推薦使用。