Http接口輸入的數據通常是鍵值對或json數據,返回的通常是json數據。本系列文章主要介紹Java調用Http接口的各類方法,本文主要介紹服務端的編寫,方便後續文章裏的客戶端的調用。文中所使用到的軟件版本:Java 1.8.0_19一、Spring 5.1.9。java
package com.inspur.demo.web.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import com.inspur.common.entity.CallResult; import com.inspur.common.util.FileUtil; import com.inspur.demo.entity.User; @Controller @RequestMapping(value="/demo/test/", method = {RequestMethod.GET, RequestMethod.POST}) public class TestController { private static Logger logger = LoggerFactory.getLogger(TestController.class); @RequestMapping("getUser") @ResponseBody public CallResult<User> getUser(String userId, String userName) { User user = new User(); user.setUserId(userId); user.setUserName(userName); CallResult<User> result = new CallResult<User>(0, "OK", user); return result; } /** * 傳入json * @param user * @return */ @RequestMapping("addUser") @ResponseBody public CallResult<String> addUser(@RequestBody User user) { logger.info(user.toString()); CallResult<String> result = new CallResult<String>(0, "OK", "用戶增長成功"); return result; } /** * 上傳文件及參數 * @param file * @param type * @return */ @RequestMapping("multi") @ResponseBody public CallResult<String> multi(@RequestParam("file") MultipartFile file, String param1, String param2) { logger.info("file={},param1={},param2={}", file.getOriginalFilename(), param1, param2); InputStream in = null; OutputStream out = null; CallResult<String> result = new CallResult<String>(0, "OK", "上傳成功"); try { in = new BufferedInputStream(file.getInputStream(), 16 * 1024); String originalFilename = file.getOriginalFilename(); //ie上傳文件該值是全路徑,處理下 if (originalFilename.indexOf("\\") > -1) { originalFilename = originalFilename.substring(originalFilename.indexOf("\\") + 1); } String fileName = "d:/temp/multi_" + System.currentTimeMillis() + "_" + originalFilename; out = new BufferedOutputStream(new FileOutputStream(fileName), 16 * 1024); byte[] buffer = new byte[16 * 1024]; int len = 0; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } } catch (Exception e) { result = new CallResult<String>(-1, "發生異常", ""); e.printStackTrace(); } finally { FileUtil.close(in); FileUtil.close(out); } return result; } }
package com.inspur.common.entity; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** * * @param <T> */ public class CallResult<T> implements Serializable { private static final long serialVersionUID = 1L; /** * 返回碼 * 0 正常,其餘異常 */ private int returnCode = 0; /** * 描述 */ private String description = "OK"; /** * 結果數據 */ private T result; public CallResult(){} public CallResult(int returnCode, String description) { this.returnCode = returnCode; this.description = description; } public CallResult(int returnCode, String description, T result) { this.returnCode = returnCode; this.description = description; this.result = result; } public int getReturnCode() { return returnCode; } public void setReturnCode(int returnCode) { this.returnCode = returnCode; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public T getResult() { return result; } public void setResult(T result) { this.result = result; } @Override public String toString() { //return JSON.toJSONString(this, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty); try { return new ObjectMapper().writeValueAsString(this); } catch (JsonProcessingException e) { e.printStackTrace(); } return ""; } }
package com.inspur.demo.entity; public class User { private String userId; private String userName; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "User [userId=" + userId + ", userName=" + userName + "]"; } }
package com.inspur.common.util; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * 文件操做工具 * */ public class FileUtil { private FileUtil() {} public static void close(InputStream in) { try { if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } public static void close(OutputStream out) { try { if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } } }
在本地部署後,訪問地址爲:web
http://localhost:8080/webframe/demo/test/getUserspring
http://localhost:8080/webframe/demo/test/addUserjson
http://localhost:8080/webframe/demo/test/multiapp