spring的controller有两个层面的含义。

1、rest api json 输出    2、页面

1、2 封装 json 输出

然后自己把上述图片所示的json数据进行封装。

需要新建包:com.mydre.miaosha.result。

包中首先新建类 Result,然后写入如下代码:

package com.mydre.miaosha.result;
/*由于数据的类型还不知道,可能是对象,也可能是数组(数组中存在好多对象),所以定义为泛型*/
public class Result<T> {
private int code;
private String msg;
private T data;

}

然后为其成员变量生成setter、getter方法

2 封装 json 输出

但是这样做也不是太好,入下图:

2 封装 json 输出

多个controller对应多个demo,当出现出错信息的时候,会显得比较混乱。不如把code和msg封装在一个名为CodeMsg的类中比较方便。当然,可以通过定义常量的方式,但是现在通过另一种方式。在Result类中写私有的构造方法(不允许通过实例化的方式进行构造),而是通过success和error方法来进行调用。

success方法的定义:

2 封装 json 输出

这时需要用到私有的构造方法,故定义之:

2 封装 json 输出

然后定义error方法:

2 封装 json 输出

然而,现在还没有CodeMsg类,需要自己进行定义。如下:

package com.mydre.miaosha.result;
public class CodeMsg {
private int code;
private String msg;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}

}


在Result类中定义error方法如下:

2 封装 json 输出

所以需要定义传入参数类型为CodeMsg的另一个私有的构造函数,供error方法调用,如下图。

2 封装 json 输出

然后,对CodeMsg类进行完善,在其中对相关的处理信息进行封装。把信息定义为类的静态成员变量,使得只在初次使用的时候实例化一次,便于在外部进行访问。节约了内存,提高了效率。如下图所示。

2 封装 json 输出

此时,对DemoController类进行完善,如下图所示:

package com.mydre.miaosha.controller;
//import org.springframework.boot.*;
//import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import com.mydre.miaosha.result.CodeMsg;
import com.mydre.miaosha.result.Result;
@Controller
@RequestMapping("/demo")
public class DemoController {
   @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World       77777!";
    }
//1.rest api json输出  2.页面
    @RequestMapping("/hello")
    @ResponseBody
    public Result<String> hello() {
        return Result.success("I'm the data of success, and my type is String");
        //类调用静态方法的时候不需要再类名之后加上泛型,即不需要Result<String>.success......
}

@RequestMapping("/helloError")
    @ResponseBody
    public Result<String> helloError() {//传入的形参是CodeMsg类型的对象
        return Result.error(CodeMsg.SERVER_ERROR);
}
}

然后,启动应用,访问网址 http://localhost:8080/demo/hello,如下图所示:

2 封装 json 输出

访问网址 http://localhost:8080/demo/helloError,如下图所示:

2 封装 json 输出

至此,json封装完成。



相关文章: