SSM中的相关注解

  1. @Resource

    jdk1.8以前自带,之后就没了,需要添加javax.annotation-api包

    只有在*Service/Impl实现类中进行@Service注解,并已经在spring.xml导入该service包的扫描,才能通过注解查到

    先按照名字找,找不到在按照类型去找

    @Resource(name = "question"),注解指定了按照名称去找,不会再按照类型去找了

    @Resource(type= Question.class),注解指定了按照类型去找,不会再按照名称去找了


  2. @Autowired

    可以代替@Resource

    只有在*Service/Impl实现类中进行@Service注解,并已经在spring.xml导入该service包的扫描,才能通过注解查到

    只按照类型去找,叫什么无所谓

    如果想按照名字去找,需要配合@Qualifier("名称")去找

    但要注意注解在*Service/Impl的实现类中查找,实现类的名称是首字母改成小写的名称,(如类名为:QuestionTypeServiceImpl,则查询的名称为questionTypeServiceImpl)

    可以在实现类的@Service("名称")@Qualifier("名称")一致,或者将@Qualifier("名称")中的名称改为实现类的名称首字母小写的名称questionTypeServiceImpl。


  3. @Controller

    spring中的注解


  4. @RequestParam("名称")

    在网页提交数据时,表单中的标签的属性name中的名称需要对应Controller中的方法的形参列表中形参的名称,当形参名不匹配时,springmvc不会识别对应的对象,获取对应的值,此时,只需要调用@RequestParam("名称")注解,输入与网页中name对应的名称,即可获取该值。

    @RequestParam(value="名称",required = false,defaultValue="默认值")

    value和name的作用一样

    required默认值为true,必须传值才能行;

    如果改成false,就跟不加注解名称对应产生的效果一样,可以不传值。

    defaultValue是添加默认值,如果网页中没有传值,则将默认值传入。


  5. @RequestHeader("属性")

    作用: 获取请求头的信息

    一般获取请求头信息,通过调用request.getHeader("accept")获得请求头信息。

    通过在形参列表中@RequestHeader("accept")String accept,即可获取请求头信息。


  6. @CookieValue("属性")

之前的方法通过CookieUtile工具类进行获取。

通过在形参列表中@CookieValue("JSESSIONID")String sessionId,即可获取请cookie的相关信息。

//4,5,6相关代码
@PostMapping("insert")
public String insert(@RequestParam(value = "title",required = false,defaultValue = "类型") String title, Integer sort,@RequestHeader("accept") String accept,@CookieValue("JSESSIONID") String sessionId,HttpServletRequest request)
{
    //String accept = request.getHeader("accept");
    System.out.println(accept);
    System.out.println(sessionId);
    System.out.println("title="+title);
    return null;
}

  1. @SessionAttributes("名称")

    一般存到session中,通过request存到session中。

    当属性值共享到ModelAndView/Model/ModelMap中时,会同时放在session中一份。

    @SessionAttributes("questionTypes")
    public class QuestionTypeController {}
    

    从Session中取值:

    ${sessionScope.questionTypes}
    

  2. @SessionAttribute("名称")

    用在形参列表中,将session中的数据取出来,给对应类型的对象。

    一般从session中取数据,通过request中取。

     @GetMapping("update")
    @ResponseBody
    public void update(@SessionAttribute("questionTypes") List<QuestionType> questionTypes) {
        questionTypes.forEach(System.out::println);
    }
    

  3. @RequestAttribute("名称")

    用在形参列表中,将request中的数据取出来,给对应类型的对象。

    一般通过request取。

    @GetMapping("update")
    @ResponseBody
    public void update(@RequestAttribute("questionTypes") List<QuestionType> questionTypes) {
        questionTypes.forEach(System.out::println);
    }
    

  4. @ModelAttribute("名称")

    作用:①放到方法前,指定功能处理方法,并含有@RequestMapping注解,返回值共享到ModelAndView的属性名中。

    ​ ② 放到控制器的普通的方法前面,没有加@RequestMapping注解,在执行控制器的所有的其他功能处理方法时,都会执行该方法,并且会共享返回值到ModelAndView中。

    @ControllerAdvice
    public class CommonControllerAdvice {
    
        @ModelAttribute("menus")
        public List<Menu> findMenus()
        {
            return menuService.findAll();
        }
    }
    

    执行所有方法前,先执行该方法,并将返回值放到ModelAndView中,网页中可以直接通过Request调用。

    ③可以将注解的数据转发到网页,并且可以修改网页调用的对象名。

    @PostMapping("insert")
    public String insert(@ModelAttribute("questionType") QuestionType questionType) {
        if (questionType.getTitle() == null || questionType.getTitle().length() < 3) {
            //命令对象questionType会共享到转发到的页面上,默认的属性名为参数名questionType,
            //可以通过@ModelAttribute注解修改共享的属性名
            return "manage/questionType/insert";
        }
        questionTypeService.insert(questionType);
        return "redirect:/manage/questionType/list";
    }
    

    拓展:

     @RequestMapping("list")
    @ModelAttribute("questionTypes")
    public List<QuestionType> list()
    {
        return questionTypeService.findAll();
    }
    

    (1)Model代替@ModelAttribute

    @RequestMapping("list")
    public void list(Model model) {
        model.addAttribute("questionTypes", questionTypeService.findAll());
    }
    

    (2)ModelMap代替@ModelAttribute

    @RequestMapping("list")
    public void list(ModelMap modelMap) {
        //modelMap.addAttribute("questionTypes", questionTypeService.findAll());
        //modelMap自带put()方法,与上述操作效果一样
        modelMap.put("questionTypes", questionTypeService.findAll());
    }
    

    (3)ModelAndView代替@ModelAttribute

     //注意这里不需要new,但ModelAndView必须返回
    @RequestMapping("list")
    public ModelAndView list(ModelAndView modelAndView) {
        modelAndView.addObject("questionTypes", questionTypeService.findAll());
        return modelAndView;
    }
    

posted @ 2020-12-23 21:24  LYCL  阅读(86)  评论(0)    收藏  举报