分send和accept兩個項目來說明
send架構

TestSend類
/**
* 后端測試調用接口
*
*
*/
@RequestMapping(value = "/send")
@RestController
public class TestSend {
Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 發送的是Map包着的List的Josn字符串(可用)
* Post方式
*/
@RequestMapping(value = "/send01")
public void send01(){
logger.info("進來send01");
Data data = new Data("hlh",23);
List<Data> list = new ArrayList<>();
list.add(data);
String url = "http://接口ip:8091/accept/accept01";
Map<String,Object> map = new HashMap<>();
map.put("list",list);
String string = JSON.toJSONString(map);
Send send = new Send();
String result = send.sendPost(url,string);
logger.info("result:"+result);//返回被調用接口返回的信息
}
/**
* 發給的是Map格式包着的實體類的Json字符串(可用)
* Post
*/
@RequestMapping(value = "/send02")
public void send02(){
logger.info("進來send02");
Data data = new Data("hlh",23);
String url = "http://接口ip:8091/accept/accept02";
Map<String,Object> map = new HashMap<>();
map.put("data",data);
logger.info("map:"+map);//map:{data=Data(name=hlh, age=23)}
String string = JSON.toJSONString(map);
logger.info("string:"+string);//string:{"data":{"age":23,"name":"hlh"}} 轉成了json字符串格式
Send send = new Send();
String result = send.sendPost(url,string);
logger.info("result:"+result);//返回被調用接口返回的信息
}
/**
* 發給的是實體類不用Map包着的Json字符串(可用)
*/
@RequestMapping(value = "/send03")
public void send03(){
logger.info("進來send03");
Data data = new Data("hlh",23);
String url = "http://接口ip:8091/accept/accept03";
logger.info("data:"+data);
String string = JSON.toJSONString(data);
logger.info("string:"+string);
Send send = new Send();
String result = send.sendPost(url,string);
logger.info("result:"+result);//返回被調用接口返回的信息
}
/**
*
* 直接實體類傳(這個直接報錯,不行的)(不可用)
*
*
*/
@RequestMapping(value = "/send04")
public void send04(){
logger.info("進來send04");
Data data = new Data("hlh",23);
String url = "http://接口ip:8091/accept/accept04";
logger.info("data:"+data);
Send send = new Send();
String result = send.sendPost02(url,data);
logger.info("result:"+result);//返回被調用接口返回的信息
}
/**
* 傳的是List轉成的字符串(可用)
*/
@RequestMapping("/send05")
public void send05(){
logger.info("進來send05");
Data data = new Data("hlh",23);
List<Data> list = new ArrayList<>();
list.add(data);
String url = "http://接口ip:8091/accept/accept05";
logger.info("list:"+list);
String string = JSON.toJSONString(list);
Send send = new Send();
String result = send.sendPost(url,string);
logger.info("result:"+result);
}
/**
* * **********************************************************
* * 體驗Spring中 RestTemplate
*
* get請求
* 1.不帶參數
* 2.帶參數
* post請求
*/
@RequestMapping(value = "/send06")
public void send06() throws URISyntaxException {
/**
* 不帶參數get請求,並且能返回一些信息
*/
logger.info("進來send06");
RestTemplate rs = new RestTemplate();
String url="http://接口ip:8091/accept/accept06";
logger.info("url");
String str = rs.getForObject(new URI(url),String.class);
logger.info("notice:"+str); // str:success
}
/**
* get方式 帶參數請求
* @throws URISyntaxException
*/
@RequestMapping(value = "/send07")
public void send07() throws URISyntaxException {
/**
* 帶參數get請求,並且能返回一些信息
*/
logger.info("進來send07");
RestTemplate rs = new RestTemplate();
String url="http://接口ip:8091/accept/accept07?name={name}&age={age}";
Map<String,Object> map = new HashMap<>();
map.put("name","hlh");
map.put("age",23);
String str = rs.getForObject(url,String.class,map);
logger.info("notice:"+str); // str:success
}
/**
* post方式
* 1.帶實體參數請求
* 接收實體一定要有無參構造,才能夠反序列化接收到數據
* 這里測試接收是實體類
*/
@RequestMapping("/send08")
public void send08(){
logger.info("進來send08");
RestTemplate rs = new RestTemplate();
String url="http://接口ip:8091/accept/accept08";
RequestEntity requestEntity = new RequestEntity("hlh",23,178);
RequestEntity requestEntity1 = rs.postForObject(url,requestEntity,RequestEntity.class);
logger.info("name:"+requestEntity1.getName()+",age:"+requestEntity1.getAge());//name:hlh,age:23
}
/**
* post方式
* 1.帶實體參數請求
* 接收實體一定要有無參構造,才能夠反序列化接收到數據
* 這里測試接收是Map
*
* 總計:
* 說明Map和實體類沒區別在發送數據和接收數據,實體類必須還要加無參構造才行
*/
@RequestMapping("/send09")
public void send09(){
logger.info("進來send09");
RestTemplate rs = new RestTemplate();
String url="http://接口ip:8091/accept/accept09";
RequestEntity requestEntity = new RequestEntity("hlh",23,178);
RequestEntity requestEntity1 = rs.postForObject(url,requestEntity,RequestEntity.class);
logger.info("name:"+requestEntity1.getName()+",age:"+requestEntity1.getAge());//name:hlh,age:23
}
/**
* post方式
* 這個是測試一個實體類中包着基本類型,實體類型,List類型進行數據傳送
*
*/
@RequestMapping("/send10")
public void send010(){
logger.info("進來send10");//進來send10
RestTemplate rs = new RestTemplate();
String url="http://接口ip:8091/accept/accept10";
RequestEntity re1 = new RequestEntity("hlh",10,120);
RequestEntity re2 = new RequestEntity("hlh2",11,130);
List<RequestEntity> list = new ArrayList<>();
list.add(re1);
list.add(re2);
Data data = new Data("hlh3",140);
SendModel sendModel = new SendModel();
sendModel.setCode("500");
sendModel.setStatus("ok");
sendModel.setData(data);
sendModel.setListEntity(list);
String str = rs.postForObject(url,sendModel,String.class);
logger.info("str:"+str);//str:success
}
}
Data類

RequestEntity類

SendModel類

Send類
/**
* 發送post請求
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "application/json");// 我加的一個頭,傳入的是json格式的話,得要加這個,后端接收就得使用@RequestBody
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
out.print(param);//已經把信息傳給了被調用接口
out.flush();
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));//這里是讀入被調用接口返回的信息
String line;
while ((line = in.readLine()) != null) {//返回的信息
result += line;
}
} catch (Exception e) {
System.out.println("異常信息:" + e);
e.printStackTrace();
}
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
System.out.println("result:"+result);
return result;
}
accept架構

TestAccept類
/**
* 接收類
*Map和實體類接收區別不大,都可以進行接收,但實體類接收必須要有無參構造才行
*/
@RequestMapping("/accept")
@RestController
public class TestAccept {
Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* List
* @param str
* @return
*/
@RequestMapping(value = "/accept01",method = RequestMethod.POST)
public String accept01(@RequestBody String str){
logger.info("str:"+str);//str:{"list":[{"age":23,"name":"hlh"}]}
//解析出來
Map map = (Map<String, Object>) JSON.parse(str);
logger.info("map:"+map);//map:{"list":[{"name":"hlh","age":23}]}
List<Map<String,Object>> list = (List<Map<String,Object>>) map.get("list");
logger.info("list:"+list);//list:[{"name":"hlh","age":23}]
for(int i=0;i<list.size();i++){
logger.info("map2"+i+":"+list.get(i));//map20:{"name":"hlh","age":23}
logger.info("name:"+list.get(i).get("name")+",age:"+list.get(i).get("age"));//name:hlh,age:23
}
/**
* 這種有問題,實體類轉換不了
*/
// List<Data> list1 = (List<Data>) map.get("list");
// for(Data ls:list1){
// logger.info("name:"+ls.getName()+",age"+ls.getAge());
// }
return "success";
}
/**
* 實體類用Map包着的Josn字符串
* @param str
* @return
*/
@RequestMapping(value = "/accept02")
public String accept02(@RequestBody String str){
logger.info("str:"+str);//str:{"data":{"age":23,"name":"hlh"}}
Map<String,Object> map = (Map)JSON.parse(str);
logger.info("map:"+map);//map:{"data":{"name":"hlh","age":23}}
Map<String,Object> map1 = (Map)map.get("data");
logger.info("map1:"+map1);//map1:{"name":"hlh","age":23}
logger.info("name:"+map1.get("name")+",age:"+map1.get("age"));//name:hlh,age:23
return "success";
}
/**
* 實體類不用Map包着
* @param str
* @return
*/
@RequestMapping(value = "/accept03")
public String accept03(@RequestBody String str){
logger.info("str:"+str);//string:{"age":23,"name":"hlh"}
Map<String,Object> map = (Map)JSON.parse(str);
logger.info("map:"+map);//map:{"name":"hlh","age":23}
logger.info("name:"+map.get("name")+",age:"+map.get("age"));//name:hlh,age:23
return "success";
}
/**
* 實體類直接傳,傳報錯了
* @param data
* @return
*/
@RequestMapping(value = "/accept04")
public String accept04(@RequestBody Data data){
logger.info("str:"+data);
return "success";
}
/**
* List轉成JSON字符串傳過來
* @param str
* @return
*/
@RequestMapping(value = "/accept05")
public String accept05(@RequestBody String str){
logger.info("str:"+str);//str:[{"age":23,"name":"hlh"}]
List<Map<String,Object>> list = (List)JSON.parse(str);
logger.info("list:"+list);//list:[{"name":"hlh","age":23}]
for(int i=0;i<list.size();i++){
logger.info("name:"+list.get(i).get("name")+",age"+list.get(i).get("age"));//name:hlh,age23
}
return "success";
}
/**
* 不帶參數get
* @return
*/
@RequestMapping(value = "/accept06")
public String accept06(){
logger.info("進來accept06");
return "success";
}
/**
* get請求帶參數
* @param name
* @param age
* @return
*/
@RequestMapping(value = "/accept07")
public String accept07(String name ,Integer age){
logger.info("進來accept07");//進來accept07
logger.info("name:"+name);//name:hlh
logger.info("age:"+age);//age:23
return "success";
}
/**
* 用實體來接收一個實體傳來的數據,
* 在接收方實體類中必須提供一個無參數構造,因為JackSon要求反序列要提供無參構造,
* 那么response也是一樣的
* @param data
* @return
*/
@RequestMapping(value = "/accept08",method = RequestMethod.POST)
public Data accept08(@RequestBody Data data){
logger.info("data:"+data);//data:{name=hlh, age=23, height=178}
return data;
}
/**
* 和上面用實體類來接收,發Map和實體類區沒區別,都可以用來接收數據
* @param map
* @return
*/
@RequestMapping(value = "/accept09" ,method = RequestMethod.POST)
public Map<String,Object> accept09(@RequestBody Map<String,Object> map){
logger.info("data:"+map);//data:{name=hlh, age=23, height=178}
return map;
}
@RequestMapping(value = "/accept10",method = RequestMethod.POST)
public String accept10(@RequestBody AcceptModelDTO acceptModelDTO){
logger.info("進來");
logger.info("code:"+acceptModelDTO.getCode());//code:500
logger.info("status:"+acceptModelDTO.getStatus());//status:ok
logger.info("name:"+acceptModelDTO.getData().getName()+",age:"+acceptModelDTO.getData().getAge());//name:hlh3,age:140
List<AcceptEntity> list =acceptModelDTO.getListEntity();
for(AcceptEntity ae:list){
/**
* 結果
* name:hlh,age:10,height:120
* name:hlh2,age:11,height:130
*/
logger.info("name:"+ae.getName()+",age:"+ae.getAge()+",height:"+ae.getHeight());
}
return "success";
}
}
Data類

AcceptData類

AcceptEntity類

AcceptModelDTO類

完成
