SpringMVC注解备注
@Controller控制层
@Service业务逻辑层
@Repository持久层(也就是dao层)
@Entity实体
@PathVariable
@RequestParam
@RequestMapping
@Autowired
@SuppressWarning废弃警告
@ModelAttribute注释的值在此Controller中每个方法执行前被执行,因此对于一个Controller映射多个URL的用法来说需谨慎使用(此注释的value值就是Model的属性的名称)
@SessionAttributes作用就是在Controller中共享Model属性
public String test1(@ModelAttribute("user") UserModel user) 只是此处多了一个注解@ModelAttribute("user"), 它的作用是将该绑定的命令对象以“user”为名称
@ModelAttribute可以在方法上使用和在方法参数上使用还有方法和参数上同时使用
(1)方法参数上使用 @requestMapping("b") public String add(@ModelAttribute "a"){ return "result"; } 会先从model中获取key为a的对象,如果获取不到就反射实例化一个对象
(2)方法上使用 @ModelAttribute("user2") public User addUser(User user){ user.setName("meihf"); return user; } 这样的话在Controller中使用@RequestMapping方法前都会执行这个方法,而且会添加两个对象到Model先添加key为user的对象,再添加key为user1的对象
(3)在方法和方法参数上都有 @ModelAttribute("user1") public User addUser(User user) { return new User(520,"I love U"); } @RequestMapping("/save") public String save(@ModelAttribute User user) { user.setUsername("U love me"); userService.save(user); return "result"; } 假设要执行保存用户操作,根据一分析可知,先执行完会产生两个User类型的对象(一个key是"user",另一个key是"user1")添加到model, 再执行save方法,此时会先从model去找key为"user"的对象,能找到再从request取值set到这个User对象.最后返回到jsp页面,model里也只有两个User类型对象.
@Controller @RequestMapping("user") @SessionAttributes("test") public class UserController { @RequestMapping(value = "test1") public String test1(HttpServletRequest request) { User user = new User("xiejx618"); request.getSession().setAttribute("test",user); return "user/list"; } @RequestMapping(value = "test2") public String test2(@ModelAttribute("test") User user,SessionStatus sessionStatus) { System.out.println(user.getUsername()); sessionStatus.setComplete(); return "user/list"; } } Session 属性的 controller 上加上 @SessionAttributes,然后在 action 需要的 User 参数上加上 @ModelAttribute,并保证两者的属性名称一致。 SpringMVC 就会自动将 @SessionAttributes 定义的属性注入到 ModelMap 对象, 使用这种方案,还需要在 SpringMVC 配置文件的 ViewResolver 定义处
, 加上 p:allowSessionOverride="true"
@Controller public class GameController { @Autowired public void setGameService(GameService gameService) { this.gameService = gameService; } @RequestMapping("{level}/ShowPrize") public String getPrizeByLevel(@PathVariable int level,HttpServletRequest request){ System.out.println(level+"Controller"); int prize=gameService.getPrizeByLevel(level); request.setAttribute("prize",prize); return "ShowPrize"; } } 重点讲一下PathVariable和RequestParam: 他们都有共同的特点像上面没有指明参数的时候PV会默认从url中找与变量名同名的值,RP是从request请求中寻找:完整的应是:@PathVariable("level") int level如果方法参数的名称跟RequestMapping中定义的访问路径中的变量名不一样,或者我要利用PathVariable明确指定后面接的方法参数是对应于URL中的哪个变量就应该这样表示。
相关推荐
JudeJoo 2020-08-21
meleto 2020-08-15
itjavashuai 2020-08-15
zhongliwen 2020-07-05
haidaoxianzi 2020-07-04
小鱿鱼 2020-06-26
haidaoxianzi 2020-06-17
MicroBoy 2020-06-17
牧场SZShepherd 2020-06-17
neweastsun 2020-06-16
haidaoxianzi 2020-06-14
zhongliwen 2020-06-13
@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象进行绑定。加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据。
DumbbellYang 2020-06-13
csuzxm000 2020-06-09
haidaoxianzi 2020-06-03
qingjiuquan 2020-05-30
84560296 2020-05-30
咻pur慢 2020-05-27