Http로부터의 JSON 해석URL연결 오브젝트
기본 http 인증 실행 중HttpURLConnection
오브젝트(Java)를 지정합니다.
URL urlUse = new URL(url);
HttpURLConnection conn = null;
conn = (HttpURLConnection) urlUse.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-length", "0");
conn.setUseCaches(false);
conn.setAllowUserInteraction(false);
conn.setConnectTimeout(timeout);
conn.setReadTimeout(timeout);
conn.connect();
if(conn.getResponseCode()==201 || conn.getResponseCode()==200)
{
success = true;
}
JSON 오브젝트, 유효한 JSON 오브젝트 형식의 문자열 데이터 또는 단순한 플레인 텍스트의 HTML이 유효한 JSON이어야 합니다.에서 접속하려면HttpURLConnection
응답을 반환한 후?
Raw data는 다음 방법으로 얻을 수 있습니다.그나저나 이 패턴은 Java 6용입니다.Java 7 이후를 사용하는 경우 리소스 사용 패턴을 고려하십시오.
public String getJSON(String url, int timeout) {
HttpURLConnection c = null;
try {
URL u = new URL(url);
c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Content-length", "0");
c.setUseCaches(false);
c.setAllowUserInteraction(false);
c.setConnectTimeout(timeout);
c.setReadTimeout(timeout);
c.connect();
int status = c.getResponseCode();
switch (status) {
case 200:
case 201:
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line+"\n");
}
br.close();
return sb.toString();
}
} catch (MalformedURLException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} finally {
if (c != null) {
try {
c.disconnect();
} catch (Exception ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
}
}
return null;
}
그런 다음 Google Gson에서 반환된 문자열을 사용하여 다음과 같이 JSON을 지정된 클래스의 객체에 매핑할 수 있습니다.
String data = getJSON("http://localhost/authmanager.php");
AuthMsg msg = new Gson().fromJson(data, AuthMsg.class);
System.out.println(msg);
AuthMsg 클래스의 예를 다음에 나타냅니다.
public class AuthMsg {
private int code;
private String message;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
http://localhost/authmanager.php에 의해 반환되는 JSON은 다음과 같아야 합니다.
{"code":1,"message":"Logged in"}
안부 전해요
다음 함수를 정의합니다(내 함수가 아닙니다. 오래 전에 어디서 찾았는지 알 수 없습니다).
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
그 후, 다음과 같이 입력합니다.
String jsonReply;
if(conn.getResponseCode()==201 || conn.getResponseCode()==200)
{
success = true;
InputStream response = conn.getInputStream();
jsonReply = convertStreamToString(response);
// Do JSON handling here....
}
또한 http 오류(400-5** 코드)가 발생했을 때 오브젝트를 해석하려면 다음 코드를 사용할 수 있습니다('getInputStream'을 'getErrorStream'으로 바꿉니다).
BufferedReader rd = new BufferedReader(
new InputStreamReader(conn.getErrorStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
return sb.toString();
JSON 문자열은 호출한 URL에서 반환되는 응답의 본문일 뿐입니다.이 코드를 추가합니다.
...
BufferedReader in = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
그러면 콘솔로 반환되는 JSON을 볼 수 있습니다.JSON 라이브러리를 사용하여 데이터를 읽고 Java 표현을 제공하는 것만이 누락되었습니다.
이 함수는 HttpResponse 객체의 형태로 url에서 데이터를 가져옵니다.
public HttpResponse getRespose(String url, String your_auth_code){
HttpClient client = new DefaultHttpClient();
HttpPost postForGetMethod = new HttpPost(url);
postForGetMethod.addHeader("Content-type", "Application/JSON");
postForGetMethod.addHeader("Authorization", your_auth_code);
return client.execute(postForGetMethod);
}
위 함수는 여기서 호출되며 Apache 라이브러리 클래스를 사용하여 json의 String 형식을 받습니다.그리고 다음 문장에서는 받은 json으로 간단한 pojo를 만들려고 합니다.
String jsonString =
EntityUtils.toString(getResponse("http://echo.jsontest.com/title/ipsum/content/ blah","Your_auth_if_you_need_one").getEntity(), "UTF-8");
final GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(JsonJavaModel .class, new CustomJsonDeserialiser());
final Gson gson = gsonBuilder.create();
JsonElement json = new JsonParser().parse(jsonString);
JsonJavaModel pojoModel = gson.fromJson(
jsonElementForJavaObject, JsonJavaModel.class);
이것은 json을 연결하기 위한 단순한 Java 모델 클래스입니다.퍼블릭 클래스 JsonJavaModel { String content ; String title ;} 이것은 커스텀 디시리얼라이저입니다.
public class CustomJsonDeserialiserimplements JsonDeserializer<JsonJavaModel> {
@Override
public JsonJavaModel deserialize(JsonElement json, Type type,
JsonDeserializationContext arg2) throws JsonParseException {
final JsonJavaModel jsonJavaModel= new JsonJavaModel();
JsonObject object = json.getAsJsonObject();
try {
jsonJavaModel.content = object.get("Content").getAsString()
jsonJavaModel.title = object.get("Title").getAsString()
} catch (Exception e) {
e.printStackTrace();
}
return jsonJavaModel;
}
Gson 라이브러리와 org.apache.http.util을 포함합니다.엔티티 유틸리티
언급URL : https://stackoverflow.com/questions/10500775/parse-json-from-httpurlconnection-object
'programing' 카테고리의 다른 글
Word후크/필터를 눌러 게시물 내부의 링크를 처리합니다. (0) | 2023.03.02 |
---|---|
잭슨:Json 구성 값 무시 (0) | 2023.03.02 |
각도 테이블 행 지시문이 테이블 내부에 렌더링되지 않음 (0) | 2023.03.02 |
Oracle - 자동 증분 ID를 사용하여 새 행 삽입 (0) | 2023.03.02 |
jQuery를 사용하여 JSON 트리를 검색하는 방법 (0) | 2023.03.02 |