spring的注解开发模式

一。
1. 总结最近几天的Spring social的流程,
下载Maven工程,导入工作空间,自动下载依赖jar包,(pom.xml文件中需要什么jar包配置自动加载,注意版本正确)
weibo Maven工程打包,并在社区应用的pom.xml中引入依赖该jar包,调用该应用的文件正常,说明融合正确;
剩下的开放都是在熟悉spring注解框架的基础上,调用相关应用的接口,完成各个功能,比如sina微博的发布、浏览、删除微博功能等

二。
1. 基于Spring social 项目,查看Spring注解开放方式相关文档,并在项目中测试验证;

验证:类级别注解和方法级别注解;
 
a). 每个请求处理参数对应一个 URL,方式就是每个方法上加注解

例如:
    @RequestMapping("/listAllBoard") // <—— ①
    public String listAllBoard() {
        bbtForumService.getAllBoard();
        System.out.println("call listAllBoard method.");
        return "listBoard";
    }
访问方式:http://192.168.190.182:8080/spring-social-showcase/listAllBoard

b). 一个 Controller 对应一个 URL,由请求参数决定请求处理方法,方式就是在类上和方法上都加注解

例如:
@Controller
@RequestMapping("/bbtForum")  // <—— ① 指定控制器对应URL请求
public class BbtForumController {

    @Autowired
    private BbtForumService bbtForumService; 

    // <—— ② 如果URL请求中包括"method=listAllBoard"的参数,由本方法进行处理
    @RequestMapping(params = "method=listAllBoard") 
    public String listAllBoard() {
        bbtForumService.getAllBoard();
        System.out.println("call listAllBoard method.");
        return "listBoard";
    } 
同时我们可以在方法的参数中根据前台提交方式的不同使用,method = RequestMethod.POST 和method = RequestMethod.GET,处理特定的HTTP请求
例如:    
    @RequestMapping(params = "method=listAllBoard", method = RequestMethod.POST) 
    public String listAllBoard() {
        bbtForumService.getAllBoard();
        System.out.println("call listAllBoard method.");
        return "listBoard";
    }     
访问方式:http://192.168.190.182:8080/spring-social-showcase/test?method=listAllBoard

三。
1. 处理 方法入参 如何 绑定 URL参数

a). 按参数名匹配进行绑定

listBoardTopic(int topicId,String boardName):分别和 topicId、boardName URL 请求参数绑定; 
方法入参按参数名匹配的原则绑定到 URL 请求参数,同时还自动完成 String 类型的 URL 请求参数到请求处理方法参数类型的转换,URL 请求参数中一定要有对应的参数,否则将抛出 TypeMismatchException 异常,提示无法将 null 转换为基本数据类型。

b). 通过注解指定绑定的 URL 参数

例如:我们把URL参数 status 使用 @RequestParam 绑定到 方法 listAllBoard2 的 message 参数
@RequestMapping(params = "method=listAllBoard2")
    public void listAllBoard2(@RequestParam("status") String message, HttpServletResponse res)
            throws IOException {
         System.out.println("*******call listAllBoard2 method******status:" + message);
         res.getWriter().write("listAllBoard2");
    }

2. request 和 session
a). request 借助 ModelMap model,保存某些参数
b). session 在类上进行注解:@SessionAttributes("currUser")
    
session注解方式:
  通过字符串数组的方式指定多个属性,如 @SessionAttributes("currUser"), @SessionAttributes({“attr1”,”attr2”})
    指定多个类,如 @SessionAttributes(types = User.class), @SessionAttributes(types = {User.class,Dept.class})
    联合使用属性名和属性类型指定 @SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})

session 级别数据获取方式:session.getAttribute(“currUser”) 或 ModelMap#get(“currUser”)

2. 定义为处理请求准备数据的方法
可以将任何一个拥有返回值的方法标注上 @ModelAttribute,使其返回值将会进入到模型对象的属性列表中。来看下面的例子           
populateItems不是一个请求处理方法,而是任何请求处理方法被调用之前,用来准备表单项模型对象的一个方法,
该形式的方法主要针对不需要传递参数的获取数据方式
    @ModelAttribute("items")//<——①向模型对象中添加一个名为items的属性
    public List<String> populateItems() {
        List<String> lists = new ArrayList<String>();
        lists.add("item1");
        lists.add("item2");
        return lists;
    }

一个队单条记录进行编辑的绑定实例:
1>. 首先获取数据并放到request中,跳转到编辑页面取用    
@RequestMapping(value = "/weibo/pageWeibo")
    public String pageWeibo(Long id, Model model) {
        model.addAttribute("statuForm",weibo.timelineOperations().getStatus(id));
        return "weibo/pageWeibo";
    }
2>. 编辑页面 modelAttribute="statuForm"
<c:url value="/weibo/submitWeibo" var="submitWeiboUrl" />
<form:form id="signup" action="${submitWeiboUrl}" method="post" modelAttribute="statuForm">
    <fieldset>
        <form:label path="text">First Name <form:errors path="text" cssClass="error" /></form:label>
        <form:input path="text" />
        <form:label path="source">Last Name <form:errors path="source" cssClass="error" /></form:label>
        <form:input path="source" />
        <form:hidden path="id"/>
    </fieldset>
    <p><button type="submit">Sign Up</button></p>
</form:form>    
3>. 编辑后提交后台处理 绑定 @ModelAttribute("statuForm") StatuForm status
@RequestMapping(value = "/weibo/submitWeibo")
    public String submitWeibo(@ModelAttribute("statuForm") StatuForm status,
            Long id, Model model) {
        System.out.println(status.getId() + status.getText());
        return "redirect:/weibo/public";
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值