我们在使用ajax来为后端传送数据的时候,也就是我们在ajax中的data所对应的值。最好先对数据进行处理。
我看了一些发现有些直接使用data:{“key1”,“value”}形式(当value的值为Boolean或者数字类型的时候不用加引号)有一些使用JSON.stringify()方法来对数据进行处理。建议先对数据进行处理。举个例子,如下所示。
var loginAct = $.trim($("#loginAct").val());
var loginpwd = $.trim($("#loginPwd").val());
var json={
"loginAct":loginAct,
"loginpwd":loginpwd
};
var jsonstr= JSON.stringify(json);
$.ajax({
url:"${pageContext.request.contextPath}/user/userLogin",
data:jsonstr,
type:"post",
contentType:"application/json;charset=utf-8",
dataType:"json",
success:function (data) {}
})
接下来就是后台拿数据了,这里有两种方式。第一种是先对前端传输过来的数据进行封装成一个对象;第二种是使用map的方式。当传输数据的格式在未来使用的频率比较高建议封装成一个类,如果用的不多这里建议使用map方式,节省内存空间。
第一种方式:封装为类。通过对应的get方法来取值。
public Map<String,Object> service(HttpServletRequest request,User user) throws LoginException {
String loginAct = user.getLoginAct();
String loginPwd = user.getLoginPwd();
第二种方式:使用map方式。通过get方式来取值
public String userLogin(@RequestBody Map<String,String> map, HttpServletRequest request){
String loginAct = map.get("loginAct");
String loginpwd = map.get("loginpwd");
进入到controller里面如果涉及到数据库的操作不幸遇到
nested exception is org.apache.ibatis.binding.BindingException: Parameter ’
这个异常,这个时候要查看你的对应的参数对应的mapper 接口文件,加上@Param(),如下所示。
User login(@Param("loginAct")String loginAct,@Param("loginpwd") String loginPwd);
@Param里面 的值即为对应的xml文件中的参数。
好了,我们完成数据库的交互后,当我们准备将部分数据传回页面时。这里我们要灵活运用request的转发和session。
如果是直接返回到ajax的success:function(data){},那么直接return即可。在返回的时候,如果涉及到了Boolean类型建议使用以下方法。
创建一个Map,然后使用put方法赋值以及使用 com.fasterxml.jackson.databind.ObjectMapper; 这个类
ObjectMapper objectMapper = new ObjectMapper();
Map<String,Boolean> map2 = new HashMap<String,Boolean>();
map2.put("success",true);
String s = objectMapper.writeValueAsString(map2);
最后直接return这个s就可以。success中的data就是s,通过data.success方式可以取到值是true(Boolean类型)
因为这前后端传值,我遇到的bug较多就不逐个把异常贴出来了。这里给的是总体的思路和传输的步骤。
PS:如果大家有更好前后端数据交互的方法可以在评论区给出思路和链接!!!