SringBoot-响应

响应数据

如何加载响应数据呢
其实在SpringBoot,已经有名为@RessponseBody的方法注解为我们提供的响应的方法,他的作用是将方法返回值直接响应,如果返回值类型为实体对象/集合,则会转换为JSON格式响应。
而@RestController已经在内部集成好了@RessponseBody。
我们可以看到@RestController的定义,他已经在内部同时集成了Controller和ResponseBody

@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.stereotype.Controller
@org.springframework.web.bind.annotation.ResponseBody
public @interface RestController {
    @org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Controller.class)
    java.lang.String value() default "";
}

我们分别以三种形式建立响应,分别是hello()字符串、getAddr()对象(JSON)、getAddrList()集合数组(数组-JSON)。

package com.ztt.controller;


import com.ztt.Pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class ResponseController {

    @RequestMapping("/hello")   // 浏览器请求/hello就会自动调用下面的方法
    public String hello(){
        System.out.println("Hello World");
        return "Hello World";
    }

    @RequestMapping("/getAddr")
    public Address getAddr()
    {
        Address addr = new Address();
        addr.setCity("西安");
        addr.setProvince("陕西");
        return addr;
    }

    @RequestMapping("/getAddrList")
    public List<Address> listAddr()
    {
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setCity("西安");
        addr.setProvince("陕西");

        Address addr2 = new Address();
        addr.setCity("深圳");
        addr.setProvince("广东");

        list.add(addr);
        list.add(addr2);

        return list;
    }

}

响应结果为:
SringBoot-响应_第1张图片
SringBoot-响应_第2张图片

统一的响应数据

刚刚上面我们已经实现了数据的响应,但是我们响应结果很复杂,包括了三种变量的响应,这其实不利于我们对接口的管理;一般工程级的项目需要提供统一的响应管理来对结构进行构造。

为此我们在com.ztt.Pojo包下,创建了Result类,其将为我们提供code、msg(返回信息)、data(响应体数据)

package com.ztt.Pojo;

public class Result {
    private Integer code; // 1表示成功,0表示失败
    private String msg; //返回提示信息
    private Object data; // 返回具体到响应体的数据

    public Result(){}

    public Integer getCode() {
        return code;
    }
    public Result(Integer code,String msg,Object data){
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
    
    // 快速创建的静态方法
    public  static Result success(Object data)
    {
        return new Result(1,"success",data);
        
    }
    public static Result success(){
        return new Result(1,"success",null);
                
    }
    public static Result error(String msg){
        return new Result(0,msg,null);
        
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

重写上面的响应

package com.ztt.controller;


import com.ztt.Pojo.Address;
import com.ztt.Pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class ResponseController {

    @RequestMapping("/hello")   // 浏览器请求/hello就会自动调用下面的方法
    public Result hello(){
        System.out.println("Hello World");
        return new Result(1,"success","Hello World");  //传统的方式新建对象并返回
    }

    @RequestMapping("/getAddr")
    public Result getAddr()
    {
        Address addr = new Address();
        addr.setCity("西安");
        addr.setProvince("陕西");
        return Result.success(addr);   // 用静态方式快速构建
    }

    @RequestMapping("/getAddrList")
    public Result listAddr()
    {
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setCity("西安");
        addr.setProvince("陕西");

        Address addr2 = new Address();
        addr.setCity("深圳");
        addr.setProvince("广东");

        list.add(addr);
        list.add(addr2);

        return Result.success(list);
    }

}

响应结果
SringBoot-响应_第3张图片

你可能感兴趣的:(windows)