后端使用json格式将数据返回给前端的三种方式的实现

文章目录

    • 使用jackson类库
    • 使用springmvc的@RestController注解
    • 使用fastjson实现

使用jackson类库

1.引jar包

  <!-- json -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>

2.写一个将object转json,并通过response对象将json格式的数据返回给前端的方法

public class BaseController{
	protected static JsonFactory factory = mapper.getJsonFactory();
	/**将对象转成json输出**/
	protected void writeJSON(Object obj) throws IOException {
		response.setContentType("text/html;charset=utf-8");
		JsonGenerator responseJsonGenerator = factory.createJsonGenerator(response.getOutputStream(), JsonEncoding.UTF8);
		responseJsonGenerator.writeObject(obj);
	}

3.后端调用与前端的接收

public class Result implements Serializable{
  private static final long serialVersionUID = 2267751680865696851L;
	/**是否成功**/
	private Boolean success = false ;
	/**返回消息**/
	private String message;
	/**返回数据**/
	private Object data;
	//省略getter和setter方法
}
@Controller
@RequestMapping("/sysuser")
public class SysUserController extends BaseController{
@RequestMapping(value = "/login", method = { RequestMethod.POST, RequestMethod.GET })
	public void login() throws IOException{
Result result=new Result();
result.setMessage("登录成功");
		result.setSuccess(true);
		super.writeJSON(result);
}
}
  submitHandler:function(form){
            $.ajax({
                dataType : "json",
                url : "sysuser/login.action",
                type : "post",
                data : $("#login_form").serialize(),
                success : function(data) {
                    $.alert(data.message);
                    if(data.success){
                    //--------------------------------------------data.success
                        window.location.href = 'page/main.action';
                    }
                },
                error : function (e){
                    var d = e.responseJSON;
                    if(d){
                        $.alert(d.message);
                    }
                }
            });
            return false; //阻止form提交
        }

使用springmvc的@RestController注解

public class Result {
    private static final int SUCCESS = 200;
    private static final int FAILED = 500;
    private int code;
    private String message;
    private Object data;
     public Result(int code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
   public static Result ok(Object data) {
        return new Result(SUCCESS, "success", data);
    }
@RestController
@RequestMapping("/order")
public class SysOrderController {
@RequestMapping("/login")
public Result login() {
   Result result=new Result();
   result.setMessage("登录成功");
   result.setSuccess(true);
   Map<String,String>map=new hashMap<>();
   map.put("content","i am content")
        return Result.ok(map);
    }
}
/**
*@RestController是@ResponseBody和@Controller的组合注解
@Controller是用来响应页面的,如果是string类型的方法,则springmvc会跳转到相应的页面(视图)
@ResponseBody是用来响应数据的,如果是对象类型的方法,则springmvc会将结果对象转成json格式输出给前端
本例中我使用的是@RestController注解,所以springmvc会将返回的对象Result自动转json返回给前端(底层默认是使用jsckson来实现数据格式转换的)
*/

/**
*public Result add(@RequestBody WegoUser user){}    @@RequestBody是将前端传来的json数据转对象。默认不用加(springmvc会自动完成数据的封装)
*/

使用fastjson实现

添加依赖:

  <dependency>
      <groupId>com.alibabagroupId>
      <artifactId>fastjsonartifactId>
      <version>1.2.58version>
    dependency>
@Controller
@RequestMapping("/login")
public class TestController {
    @RequestMapping("/test")
    public void test(HttpServletResponse response) throws IOException {
        SysUser sysUser=new SysUser();
        sysUser.setLoginPass("123456");
        sysUser.setLoginAccount("小明");
        System.out.println("dskfjdsfssdfdsfklkdfdsf");
        JSONObject jsonObject= (JSONObject) JSONObject.toJSON(sysUser);
        Map<String,String>map=new HashMap<>();
        map.put("phone","1223456");
        map.put("status","ok");
        jsonObject.put("info",map);
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write(jsonObject.toJSONString());
    }
}
//结果如下:
//{"loginAccount":"小明","roles":[],"loginPass":"123456","info":{"phone":"1223456","status":"ok"}}

你可能感兴趣的:(后端,java,web,SSH,spring)