搭建基于springMVC的WEB开发框架·标准化交互数据协议

来源:互联网 发布:英雄联盟js 编辑:程序博客网 时间:2024/05/22 03:58

        在一个WEB或者是后台服务项目里,对项目中所有的前后端数据交互定义一个统一的格式是非常必要的。无论是前端是Html还是各种手机APP,拥有了一套统一的交互标准后后端服务都能无缝对接前端。

        在这里我们可以简单的定义一个数据交互格式:

 

import java.util.HashMap;import java.util.Map;public abstract class PAction {private Map<String,Object> getMap(){Map<String,Object> map = new HashMap<String,Object>();map.put("errMsg", "");map.put("state", "");map.put("data", "");return map;}protected Map<String,Object> returnTure(Object data){Map<String,Object> map = this.getMap();map.put("state","true");map.put("data",data);return map;}protected Map<String,Object> returnTure(){Map<String,Object> map = this.getMap();map.put("state","true");return map;}protected Map<String,Object> returnFalse(String msg){Map<String,Object> map = this.getMap();map.put("state","false");map.put("errMsg", msg);return map;}}

返回的数据格式为一个Map类型,包含了以下3个元素:

state--定义交互是否成功,true或者false

data--要传递给前端实际的数据
errMsg--如果此次交互失败(即:state="false”),则将错误信息存放到该处。


下面我们基于springMVC编写一个实际的Controller

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.pervcom.domain.Admin;import com.pervcom.sys.dao.LoginDao;@Controller@RequestMapping("/login.action")public class LoginAction extends PAction {@Autowiredprivate LoginDao loginDao;@RequestMapping(params = "operate=login")public @ResponseBody Object login(Admin param,HttpServletRequest request) {Admin admin = this.loginDao.adminInfo(param);if(admin!=null){HttpSession session = request.getSession(true);session.setAttribute("loginNo",admin.getLoginNo());session.setAttribute("adminInfo",admin);return this.returnTure();}elsereturn this.returnFalse("用户名或密码错误");}@RequestMapping(params = "operate=loginout")public String loginout(HttpServletRequest request) {HttpSession session = request.getSession(true);session.invalidate();return "redirect:/login.html";}}

在这个Controller里使用了注解@ResponseBody来将这个Map类型的数据格式转变成json格式传递给前端。这样也方便前端对数据进行解析。

当然,要让springMVC帮你把数据变成json还需要对springMVC进行配置:

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --><bean id="handleAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="messageConverters">    <list>       <ref bean="mappingStringHttpMessageConverter" />   <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->  </list>  </property></bean>

最后我们以html为例,看看在html里如何接收并处理数据:

<SCRIPT language=javascript type=text/javascript> function submit(){var loginNo = $("#loginNo").val();var password = $("#password").val();if(loginNo=="" || password==""){alert("请输入用户名或密码");return;}$.ajax({type:"post",url:"/mik0001.action?operate=login",data:"loginNo="+loginNo+"&password="+password,success:function(obj){if(obj.state=="true"){location.href="/mik0001.action?operate=index";}else{alrt(obj.errMsg);}}     });}</SCRIPT>


阅读全文
1 0