Spring:将响应实体转换为JSON

时间:2018-02-22 11:03:54

标签: arrays json spring rest web-services

从我的其他客户端,我正在点击一个Web服务,并以字符串{"code":"00000","msg":"Success">的形式获得我的回复。现在我以JSONObject的形式转换它,然后我可以进一步使用它。但我无法做到。以下是我正在使用的代码。请指导。

private ResponseEntity<String> test()
{
    final String uri = "URL";

    RestTemplate restTemplate = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);       
    ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);       
    System.out.println(result);

    //This part is not working.
    try {
        JSONObject arr = new JSONObject((result));
        for (int i = 0; i < arr.length(); i++) {
          JSONObject abc = arr.getJSONObject(i);
          System.out.println("test1 : " + abc.getString("test1"));
          System.out.println("test2 : " + abc.getString("test2"));
          System.out.println("test3 : " + abc.getString("test3"));
        }
    } catch (Exception e) {
    }

    return result;
}

2 个答案:

答案 0 :(得分:1)

您应该创建一个与您的响应匹配的类,而不是转换为通用的JSONObject Spring将使用Jackson(幕后)将响应映射到您的模型类。没有必要自己转换它。

所以我们说,你创建了一个类

class Response {
String code;
String message:

//Gettes and Setters
}

现在您可以像这样更改代码

 ResponseEntity<Response> result = restTemplate.exchange(uri, HttpMethod.GET, entity, Response.class);     

现在,如果你使用result.getBody(),这将给你的Response对象,你可以使用

答案 1 :(得分:-2)

一种形式是使用JSONObject

		<dependency>
			<groupId>com.googlecode.json-simple</groupId>
			<artifactId>json-simple</artifactId>
			<version>1.1</version>
			<scope>${scope}</scope>
		</dependency>

import org.json.simple.JSONObject;

JSONObject json = new JSONObject();
		
json.put("key1", value1);
json.put("key2", value2);