響應數據
如何加載響應數據呢
其實在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;}}
響應結果為:
統一的響應數據
剛剛上面我們已經實現了數據的響應,但是我們響應結果很復雜,包括了三種變量的響應,這其實不利于我們對接口的管理;一般工程級的項目需要提供統一的響應管理來對結構進行構造。
為此我們在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);}@Overridepublic 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);}}
響應結果