点滴记载,点滴进步,愿自己更上一层楼。
继续上篇参数绑定问题,这次叙述springmvc的json传自动绑定到对应的vo,即不需要在自己去做json的转换,框架帮你实现。
进入正题。
如果要让框架自动绑定将前台传过来的json数据自动给你封装到自己的pojo中去,需要两个jar。
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
springmvc使用jackson包进行json数据的转换。
将对应的依赖添加到pom.xml中去。
org.codehaus.jackson
jackson-core-asl
1.9.13
org.codehaus.jackson
jackson-mapper-asl
1.9.13
其他的配置不需要了,因为用的
1 用jquery的ajax提交json数据。
首先要将jquery相关的js引用到jsp中。注意json串,里面必须是双引号。contentType同样必须要写,因为默认是key/value方式提交。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isELIgnored="false"%>
Title
<%-- 引入jquery库--%>
<%-- 对应的ajax提交请求 --%>
后台action代码。这里面虽然注释已经写得清楚了,但是还是要再说一下。如果想自动将json串的数据绑定到vo的属性中,
必须要在对应的vo前面写@RequestBody注解,否则无效。@ResponseBody 用于将对应的vo转换成json数据返回前台,不在需要程序员手动转换。
package com.soft.controller;
import com.soft.po.JsonParamVo;
import com.soft.po.ParamVo;
import com.soft.po.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@Controller
public class TestJsonParamController {
/**
* 跳转到json提交页面
* @return ModelAndView
*/
@RequestMapping(value="/toJsonParamJsp")
public ModelAndView toMapJsp(){
ModelAndView model = new ModelAndView();
model.setViewName("test/testJsonParam");
return model;
}
/**
* 1 json数据直接绑定到vo
* @RequestBody springmvc 会将json数据直接绑定到vo对应的属性中
* @ResponseBody JsonParamVo springmvc看到@ResponseBody
* 会直接将对应的vo中的数据转换成json串
* @return ModelAndView
*/
@RequestMapping(value="/testJsonParam01")
public @ResponseBody JsonParamVo testJsonParam01(@RequestBody JsonParamVo jsonParamVo){
return jsonParamVo;
}
}
json数据对应的vo
package com.soft.po;
/**
* Created by xuweiwei on 2017/8/19.
*/
public class JsonParamVo {
private String name;
private Integer age;
private String hobby;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
开始测试。
点击页面提交按钮将json数据传入后台。
可以看到红框中的数据,显示已经将json中的数据绑定到vo中的属性中了,而代码并没有做什么多余的转化操作,仅仅是加了个@RequestBody注解,springmvc就帮我们自动转化了。而@ResponseBody将vo再次转化为json返回给前台页面。
如红框中显示,已经转换成json串。最后拿到json串中的数据显示到页面。
这里讲的是springmvc自带的功能。省去了程序员的一下工作。但是这样做有些局限,因为程序不可能总是这样的json串。所以真正项目中先通过vo接收前台数据,最后在返回给前台json串,比较常见。
其实具体实现就是后台接收数据的时候不再用json,而用普通的接收方法,只不过最后返回给前台的还是一样的。
具体实现
1 后台测试action
/**
* 1 json数据直接绑定到vo
* @ResponseBody JsonParamVo springmvc看到@ResponseBody
* 会直接将对应的vo中的数据转换成json串
* @return ModelAndView
*/
@RequestMapping(value="/testJsonParam02")
public @ResponseBody JsonParamVo testJsonParam02(JsonParamVo jsonParamVo){
return jsonParamVo;
}
jsp ajax 请求方法,注意参数部分。参数部分写了两种形式,两种形式都可以使用,看你个人想法了。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isELIgnored="false"%>
Title
<%-- 引入jquery库--%>
<%-- 对应的ajax提交请求 --%>
开始测试:
点击页面提交按钮,触发ajax请求后台action。
返回前台结果:
可以看到红框中的数据就是后台返回的springmvc转化的json数据。
将数据显示到页面:
json交互,参数绑定到此告一段落。论可扩展性,第二种扩展性比较好,推荐使用。
接下来要写的是参数校验部分。
点滴记载,点滴进步,愿自己更上一层楼。加油!!!