Java post 文件 json

匿名 (未验证) 提交于 2019-12-02 21:35:18

分别给出了post发送文件和json数据的函数,其中使用到了Jackson库来转化Json数据,使用log4j2来打印日记,可自行剔除。

public class HttpUtils {     static private ObjectMapper objectMapper=new ObjectMapper();     static private Logger logger= LogManager.getLogger();      /**      * 以post请求方式发送文件      * @param url       * @param name 文件的请求参数名      * @param fileName 文件名      * @param fileInput 文件的输入流      * @return 默认返回参数为Json格式的数据      * @throws IOException      * @throws InterruptedException      */     static public Map<String,Object> postFile2(String url,String name,String fileName,InputStream fileInput) throws IOException, InterruptedException {         String charset = "UTF-8";         String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value.         String CRLF = "\r\n"; // Line separator required by multipart/form-data.          URLConnection connection = new URL(url).openConnection();         connection.setDoOutput(true);         connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);          try (                 OutputStream output = connection.getOutputStream();                 PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true);         ) {             // Send binary file.             writer.append("--" + boundary).append(CRLF);             writer.append("Content-Disposition: form-data; name=\""+name+"\"; filename=\"" + URLEncoder.encode(fileName,"UTF-8") + "\"").append(CRLF);             writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(CRLF);             writer.append("Content-Transfer-Encoding: binary").append(CRLF);             writer.append(CRLF).flush();             fileInput.transferTo(output);             output.flush(); // Important before continuing with writer!             writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary.              // End of multipart/form-data.             writer.append("--" + boundary + "--").append(CRLF).flush();         }          // Request is lazily fired whenever you need to obtain information about response.         int responseCode = ((HttpURLConnection) connection).getResponseCode();         System.out.println(responseCode); // Should be 200         //读取响应消息         BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream()));         StringBuilder stringBuilder=new StringBuilder();         String tempStr=null;         while((tempStr=reader.readLine())!=null){             stringBuilder.append(tempStr);         }         //转化为JSON         Map<String,Object> response= objectMapper.readValue(stringBuilder.toString(),Map.class);         return response;     }  	/** 	* 以post请求发送Json文件 	*/     public static Map<String,Object> sendJsonPost(String url,String jsonStr) throws IOException, Utils.ReceiveBadCodeException {         HttpURLConnection httpURLConnection= (HttpURLConnection) new URL(url).openConnection();         //配置连接         httpURLConnection.setDoOutput(true);         httpURLConnection.setRequestMethod("POST");         httpURLConnection.setRequestProperty("Content-Type","application/json;charset=UTF-8");         OutputStream out=httpURLConnection.getOutputStream();         //发送         out.write(jsonStr.getBytes("UTF-8"));         //检查响应         InputStream in=httpURLConnection.getInputStream();         StringBuilder stringBuilder=new StringBuilder();         byte[] bytes=new byte[1024];         int num;         while((num=in.read(bytes))!=-1){             stringBuilder.append(new String(bytes,"utf-8"));         }         Map<String,Object> response=objectMapper.readValue(stringBuilder.toString(),Map.class);         return response;     }  } 

参考:

文章来源: https://blog.csdn.net/jdbdh/article/details/90301077
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!