Postman에서 호출 할 때 정상적으로 작동하는 GO Lang REST API가 있습니다. 그러나 HttpURLConnection
매개 변수를 사용하여 DELETE
메서드를 호출하려고하면 메서드에 의해 수신되지 않습니다.Java 클라이언트 - Go to HTTP Mux Server - go 메소드에서 매개 변수가 비어 있음
요청 :
_url = new URL(_urlBase+method);
_http = (HttpURLConnection) _url.openConnection();
_http.setRequestMethod(requestType);
_http.setRequestProperty("Accept", "application/json");
if ((requestType.toUpperCase().equals("POST")) || (requestType.toUpperCase().equals("DELETE")))
{
_http.setRequestProperty("Accept", "application/json");
byte[] postData = params.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
_http.setDoOutput(true);
_http.setInstanceFollowRedirects(false);
_http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
_http.setRequestProperty("charset", "utf-8");
_http.setRequestProperty("Content-Length", Integer.toString(postDataLength));
_http.setUseCaches(false);
try(DataOutputStream wr = new DataOutputStream(_http.getOutputStream())) {
wr.write(postData);
}
}
if (_http.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + _http.getResponseCode());
}
PS :이 순간에 시험에 세 REST API를 가지고있다. 이 메서드는 GO Lang에 대한 매개 변수를 전달하지 않고 MUX
을 사용합니다. 스칼라와 레일즈에서 잘 작동합니다.
추신 : 켜짐 http.Request.FormValue(field)
에서 매개 변수가 표시됩니다.
이동 경로 :
r := mux.NewRouter()
r.HandleFunc("/Rest/get", get).Methods("GET")
r.HandleFunc("/Rest/putCity/{city}", putCity).Methods("PUT")
r.HandleFunc("/Rest/updateCity", updateCity).Methods("POST")
r.HandleFunc("/Rest/deleteCity", deleteCity).Methods("DELETE")
http.ListenAndServe(":12345", r)
방법 점점 매개 변수 : 사람을 도우려고에 대한
func deleteCity(w http.ResponseWriter, r *http.Request) {
var city string = r.FormValue("city")
}
감사합니다! 문안 인사.
안녕하세요. 먼저 나를 도와 주셔서 감사합니다. 사실,이 게시물을 만들기 전에 이미 제안을 적용하려고했습니다. 그러나, 내가 그것을했을 때, 나는 mux.Vars (httpRequest)에서 params를 얻고 있었고 매개 변수도 얻지 못했습니다. 재미있는 점은 우편 발송자 응용 프로그램에서이 요청을하면 Go 서버가 양방향으로 매개 변수를 가져올 수 있다는 것입니다. 그건 내가 자바 요청 문제를 가지고 있다고 생각하게 만든다. –
Postman과 Java 클라이언트간에 다른 결과를 얻고 싶습니까? 나는 당신의 코드 (우편 배달부와 자바)를 사용하여 이것을 다시 검사했고, DELETE 요청의 경우'FormValue()'에서 리턴 된 양식 값이 없다. 위의 답에 대해 실제 요청과 양식 값을 검사하는 코드 스 니펫을 추가했습니다. – fhe
부수적으로, Java 클라이언트 코드에서'Accept'request 속성을 두 번 설정하고 있습니다 :) – fhe