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

        在一个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 {
	@Autowired
	private 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();
		}else
			return 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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值