在 java 中使用 PATCH API(之前的问题已被删除)
Consuming PATCH API in java(Earlier question have been removed)
我必须在 java 中使用 PATCH API。当我尝试在下面的代码中使用时,它给出了异常
java.net.ProtocolException: Invalid HTTP method: PATCH
at java.net.HttpURLConnection.setRequestMethod(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod(Unknown Source)
at com.java.jackson.jackson.PatchRequest.main(PatchRequest.java:32)
下面代码中的这一行抛出异常。
connection.setRequestMethod("PATCH");
我正在使用下面的代码。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonObject;
public class PatchRequest {
public static void main(String[] args) {
try {
HttpURLConnection connection=null;
String targetUrl="https://xxxxxxxxx-t0.data.digitalassistant.oci.oc-test.com/api/v1/bots/"+botID+"/dynamicEntities/"+dynamicEntityId+"/pushRequests/"+pushRequestId+"/values";
URL url=new URL(targetUrl);
connection=(HttpURLConnection) url.openConnection();
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("PATCH");
connection.setRequestProperty("Content-Type","application/json");
connection.setRequestProperty("Authorization","Bearer "+"eyJ4NXQjUzI1NiI6IjZhYnBycWVsRl9ld3NEaW1HRy0wY0JpNVg2N09jQjkzTGNyN2Y4M3UzLXMiLCJ4NXQiOiJkdlhSRXBGdXpTenRMdGlMM2Vmbk1rbVo0Rk0iLCJraWQiOiJTSUdOSU5HX0tFWSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJpZGNzLW9kYS05NDE3ZjkzNTYwYjk0ZWI4YTJlMmE0YzlhYWM5YTNmZi10MF9BUFBJRCIsInVzZXIudGVuYW50Lm5hbWUiOiJpZGNzLTgyOTcyOTIxZTQyNjQxYjFiZjA4MTI4YzNkOTNhMTljIiwic3ViX21hcHBpbmdhdHRyIjoidXNlck5hbWUiLCJwcmltVGVuYW50Ijp0cnVlLCJpc3MiOiJodHRwczpcL1wvaWRlbnRpdHkub3JhY2xlY2xvdWQuY29tXC8iLCJ0b2tfdHlwZSI6IkFUIiwiY2xpZW50X2lkIjoiaWRjcy1vZGEtOTQxN2Y5MzU2MGI5NGViOGEyZTJhNGM5YWFjOWEzZmYtdDBfQVBQSUQiLCJjYV9ndWlkIjoiY2FjY3QtYzZkNjgxNDI5YzZiNGQyMTgzMzkwYWE2ZTczZGNmY2IiLCJhdWQiOiJodHRwczpcL1wvaWRjcy1vZGEtOTQxN2Y5MzU2MGI5NGViOGEyZTJhNGM5YWFjOWEzZmYtdDAuZGF0YS5kaWdpdGFsYXNzaXN0YW50Lm9jaS5vYy10ZXN0LmNvbSIsInN1Yl90eXBlIjoiY2xpZW50Iiwic2NvcGUiOiJcL2FwaVwvdjEiLCJjbGllbnRfdGVuYW50bmFtZSI6ImlkY3MtODI5NzI5MjFlNDI2NDFiMWJmMDgxMjhjM2Q5M2ExOWMiLCJleHAiOjE1OTM1NTU3MzQsImlhdCI6MTU5MzU1MjEzNCwidGVuYW50X2lzcyI6Imh0dHBzOlwvXC9pZGNzLTgyOTcyOTIxZTQyNjQxYjFiZjA4MTI4YzNkOTNhMTljLmlkZW50aXR5LmM5ZGV2Mi5vYzlxYWRldi5jb20iLCJjbGllbnRfZ3VpZCI6IjI2NTNlMTBjY2NiODQzMmFhNWIzMTEwYTllNTdmM2FjIiwiY2xpZW50X25hbWUiOiJpZGNzLW9kYS05NDE3ZjkzNTYwYjk0ZWI4YTJlMmE0YzlhYWM5YTNmZi10MCIsInRlbmFudCI6ImlkY3MtODI5NzI5MjFlNDI2NDFiMWJmMDgxMjhjM2Q5M2ExOWMiLCJqdGkiOiJkZDBjYTA5NC0wY2EyLTQ5YmUtYmEzYi1hYWJkMTBjNjIyY2IifQ.j2tQr_lS5DNwzRuttsDKxDMYoiGreFVfe-rs-TmRF1gN5VDmNcnKnw5WWh8yL73ixrNtoELbY5h7uRyB49vCMPHiUtIMRYL8yXGfn56VOJvxshQAVjfCrMyGS6FeTlnuR-4CLEwy_QYWXV3CX7JRN2cVbYapwS1Nex9KX0wrF-tMmgEEttBsQxDlc6BqwacCtFBVjKvZTyhucivjQCfMhFINeMtL3ktqs1e3_ztundyiWV6vjDgrGjVY5UatHLqdorTC0Q56GVi3OPIAKisDUAP7vtnaeuaLR9aARwPVDFLcY6gMjsOWMYCfAHkAZ7RBkuLsptxUc3czUXfqMLxqtw");
connection.setRequestProperty("Accept", "application/json");
OutputStream os = connection.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
osw.write("\"{\n \\"delete\\": [\n \n {\n \\"canonicalName\\": \\"FTE Discrete Org\\"\n } \n ],\n \\"modify\\": [\n {\n \\"canonicalName\\": \\"FTE Process Org\\",\n \\"synonyms\\": [\n \\"FTE Process Org\\",\\"FTE Process Org\\",\\"fteprocessorg\\"\n ]\n }\n ],\n \n \\"add\\": [ \n\n {\n \\"canonicalName\\": \\"Vision Canada\\",\n \\"synonyms\\": [\n \\"visioncanada\\",\n \\"vision canada\\",\\"vision canada\\"\n ]\n },\n {\n \\"canonicalName\\": \\"apple computers\\",\n \\"synonyms\\": [\n \\"apple corp\\",\n \\"apple\\" \n ]\n }\n ]\n}\"");
osw.flush();
osw.close();
os.close();
System.out.println("Code works before connect");
connection.connect();
System.out.println("Code works after connect");
int responseCode=connection.getResponseCode();
System.out.println("Response code:"+responseCode);
if (responseCode==401) {
System.out.println("Unauthorized Error");
} else if(responseCode==200) {
InputStreamReader in=new InputStreamReader(connection.getInputStream());
BufferedReader reader =new BufferedReader(in);
String output;
String apiOutput="";
while((output=reader.readLine())!=null) {
apiOutput+=output;
}
System.out.println(apiOutput);
connection.disconnect();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
我在 google 中阅读,然后我将抛出异常的行替换为以下 2 行。
connection.setRequestProperty("X-HTTP-Method-Override", "PATCH");
connection.setRequestMethod("POST");
然后它抛出 Http status code 412
。你能帮我做同样的事情吗?
您将无法使用 java.net.HttpURLConnection
执行此操作,请参阅下面的 link 中的详细信息。您需要使用 java.net.http
包中的客户端 API。
我必须在 java 中使用 PATCH API。当我尝试在下面的代码中使用时,它给出了异常
java.net.ProtocolException: Invalid HTTP method: PATCH
at java.net.HttpURLConnection.setRequestMethod(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod(Unknown Source)
at com.java.jackson.jackson.PatchRequest.main(PatchRequest.java:32)
下面代码中的这一行抛出异常。
connection.setRequestMethod("PATCH");
我正在使用下面的代码。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonObject;
public class PatchRequest {
public static void main(String[] args) {
try {
HttpURLConnection connection=null;
String targetUrl="https://xxxxxxxxx-t0.data.digitalassistant.oci.oc-test.com/api/v1/bots/"+botID+"/dynamicEntities/"+dynamicEntityId+"/pushRequests/"+pushRequestId+"/values";
URL url=new URL(targetUrl);
connection=(HttpURLConnection) url.openConnection();
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("PATCH");
connection.setRequestProperty("Content-Type","application/json");
connection.setRequestProperty("Authorization","Bearer "+"eyJ4NXQjUzI1NiI6IjZhYnBycWVsRl9ld3NEaW1HRy0wY0JpNVg2N09jQjkzTGNyN2Y4M3UzLXMiLCJ4NXQiOiJkdlhSRXBGdXpTenRMdGlMM2Vmbk1rbVo0Rk0iLCJraWQiOiJTSUdOSU5HX0tFWSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJpZGNzLW9kYS05NDE3ZjkzNTYwYjk0ZWI4YTJlMmE0YzlhYWM5YTNmZi10MF9BUFBJRCIsInVzZXIudGVuYW50Lm5hbWUiOiJpZGNzLTgyOTcyOTIxZTQyNjQxYjFiZjA4MTI4YzNkOTNhMTljIiwic3ViX21hcHBpbmdhdHRyIjoidXNlck5hbWUiLCJwcmltVGVuYW50Ijp0cnVlLCJpc3MiOiJodHRwczpcL1wvaWRlbnRpdHkub3JhY2xlY2xvdWQuY29tXC8iLCJ0b2tfdHlwZSI6IkFUIiwiY2xpZW50X2lkIjoiaWRjcy1vZGEtOTQxN2Y5MzU2MGI5NGViOGEyZTJhNGM5YWFjOWEzZmYtdDBfQVBQSUQiLCJjYV9ndWlkIjoiY2FjY3QtYzZkNjgxNDI5YzZiNGQyMTgzMzkwYWE2ZTczZGNmY2IiLCJhdWQiOiJodHRwczpcL1wvaWRjcy1vZGEtOTQxN2Y5MzU2MGI5NGViOGEyZTJhNGM5YWFjOWEzZmYtdDAuZGF0YS5kaWdpdGFsYXNzaXN0YW50Lm9jaS5vYy10ZXN0LmNvbSIsInN1Yl90eXBlIjoiY2xpZW50Iiwic2NvcGUiOiJcL2FwaVwvdjEiLCJjbGllbnRfdGVuYW50bmFtZSI6ImlkY3MtODI5NzI5MjFlNDI2NDFiMWJmMDgxMjhjM2Q5M2ExOWMiLCJleHAiOjE1OTM1NTU3MzQsImlhdCI6MTU5MzU1MjEzNCwidGVuYW50X2lzcyI6Imh0dHBzOlwvXC9pZGNzLTgyOTcyOTIxZTQyNjQxYjFiZjA4MTI4YzNkOTNhMTljLmlkZW50aXR5LmM5ZGV2Mi5vYzlxYWRldi5jb20iLCJjbGllbnRfZ3VpZCI6IjI2NTNlMTBjY2NiODQzMmFhNWIzMTEwYTllNTdmM2FjIiwiY2xpZW50X25hbWUiOiJpZGNzLW9kYS05NDE3ZjkzNTYwYjk0ZWI4YTJlMmE0YzlhYWM5YTNmZi10MCIsInRlbmFudCI6ImlkY3MtODI5NzI5MjFlNDI2NDFiMWJmMDgxMjhjM2Q5M2ExOWMiLCJqdGkiOiJkZDBjYTA5NC0wY2EyLTQ5YmUtYmEzYi1hYWJkMTBjNjIyY2IifQ.j2tQr_lS5DNwzRuttsDKxDMYoiGreFVfe-rs-TmRF1gN5VDmNcnKnw5WWh8yL73ixrNtoELbY5h7uRyB49vCMPHiUtIMRYL8yXGfn56VOJvxshQAVjfCrMyGS6FeTlnuR-4CLEwy_QYWXV3CX7JRN2cVbYapwS1Nex9KX0wrF-tMmgEEttBsQxDlc6BqwacCtFBVjKvZTyhucivjQCfMhFINeMtL3ktqs1e3_ztundyiWV6vjDgrGjVY5UatHLqdorTC0Q56GVi3OPIAKisDUAP7vtnaeuaLR9aARwPVDFLcY6gMjsOWMYCfAHkAZ7RBkuLsptxUc3czUXfqMLxqtw");
connection.setRequestProperty("Accept", "application/json");
OutputStream os = connection.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
osw.write("\"{\n \\"delete\\": [\n \n {\n \\"canonicalName\\": \\"FTE Discrete Org\\"\n } \n ],\n \\"modify\\": [\n {\n \\"canonicalName\\": \\"FTE Process Org\\",\n \\"synonyms\\": [\n \\"FTE Process Org\\",\\"FTE Process Org\\",\\"fteprocessorg\\"\n ]\n }\n ],\n \n \\"add\\": [ \n\n {\n \\"canonicalName\\": \\"Vision Canada\\",\n \\"synonyms\\": [\n \\"visioncanada\\",\n \\"vision canada\\",\\"vision canada\\"\n ]\n },\n {\n \\"canonicalName\\": \\"apple computers\\",\n \\"synonyms\\": [\n \\"apple corp\\",\n \\"apple\\" \n ]\n }\n ]\n}\"");
osw.flush();
osw.close();
os.close();
System.out.println("Code works before connect");
connection.connect();
System.out.println("Code works after connect");
int responseCode=connection.getResponseCode();
System.out.println("Response code:"+responseCode);
if (responseCode==401) {
System.out.println("Unauthorized Error");
} else if(responseCode==200) {
InputStreamReader in=new InputStreamReader(connection.getInputStream());
BufferedReader reader =new BufferedReader(in);
String output;
String apiOutput="";
while((output=reader.readLine())!=null) {
apiOutput+=output;
}
System.out.println(apiOutput);
connection.disconnect();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
我在 google 中阅读,然后我将抛出异常的行替换为以下 2 行。
connection.setRequestProperty("X-HTTP-Method-Override", "PATCH");
connection.setRequestMethod("POST");
然后它抛出 Http status code 412
。你能帮我做同样的事情吗?
您将无法使用 java.net.HttpURLConnection
执行此操作,请参阅下面的 link 中的详细信息。您需要使用 java.net.http
包中的客户端 API。