http傳輸json進行服務端介面與客戶端對接,以及restful實現
阿新 • • 發佈:2019-02-19
話不多說,直接貼程式碼,照寫就好了
服務端介面編寫,我用的是springmvc,服務端介面其實和平時web開發一樣,就是返回出json就好了,還有就是接受資料也是json,方法如下:
實現的是一個通過服務端接收客戶端json{“name”:"cwh"}名字name進行查詢操作,然後給客戶端返回json;@Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userservice; @RequestMapping("/getUserByName") public @ResponseBody User getUserByName(HttpServletRequest request) throws IOException{ StringBuffer str = new StringBuffer(); try { BufferedInputStream in = new BufferedInputStream(request.getInputStream()); int i; char c; while ((i=in.read())!=-1) { c=(char)i; str.append(c); } }catch (Exception ex) { ex.printStackTrace(); } JSONObject obj= JSONObject.fromObject(str.toString()); System.out.println(obj.get("name")); User user= userservice.getUserByName(obj.get("name").toString()); return user; } }
客戶端實現如下:
ok,把服務端部署到tomcatimport java.io.IOException; import net.sf.json.JSONObject; import net.spring.model.User; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.junit.Test; public class Client { @Test public void HttpPostData() { try { HttpClient httpclient = new DefaultHttpClient(); String uri = "http://localhost:8080/springMVC/user/getUserByName"; HttpPost httppost = new HttpPost(uri); //新增http頭資訊 httppost.addHeader("Authorization", "your token"); //認證token httppost.addHeader("Content-Type", "application/json"); httppost.addHeader("User-Agent", "imgfornote"); JSONObject obj = new JSONObject(); obj.put("name", "cwh"); httppost.setEntity(new StringEntity(obj.toString())); HttpResponse response; response = httpclient.execute(httppost); //檢驗狀態碼,如果成功接收資料 int code = response.getStatusLine().getStatusCode(); System.out.println(code+"code"); if (code == 200) { String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""} obj= JSONObject.fromObject(rev); User user = (User)JSONObject.toBean(obj,User.class); System.out.println("返回資料==="+user.toString()); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
執行客戶端:返回資料成功
當然也可以用RESTFUL風格來實現
服務端可以這麼編寫:
@RequestMapping("/getUserByName/{name}")
public @ResponseBody User getUserByName(@PathVariable("name")String name) throws IOException{
User user= userservice.getUserByName(name);
return user;
}
那麼客戶端請求就這麼寫了:
public void HttpPostData() { try { HttpClient httpclient = new DefaultHttpClient(); String uri = "http://localhost:8080/springMVC/user/getUserByName/cwh"; HttpPost httppost = new HttpPost(uri); JSONObject obj = new JSONObject(); HttpResponse response; response = httpclient.execute(httppost); //檢驗狀態碼,如果成功接收資料 int code = response.getStatusLine().getStatusCode(); System.out.println(code+"code"); if (code == 200) { String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""} obj= JSONObject.fromObject(rev); User user = (User)JSONObject.toBean(obj,User.class); System.out.println("返回資料==="+user.toString()); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
這樣也是可以的