2017-01-25 100 views
5

我不能直接獲取的JSONObject,此代碼的工作:RestTemplate無法獲取的JSONObject

RestTemplate restTemplate = new RestTemplate(); 
String str = restTemplate.getForObject("http://127.0.0.1:8888/books", String.class); 
JSONObject bookList = new JSONObject(str); 

但是這個代碼不:

JSONObject bookList = restTemplate.getForObject("http://127.0.0.1:8888/books", JSONObject.class); 

可能是什麼問題呢?它不會給出錯誤,但最終我有一個空的JSONObject。

我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>library-client</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>LibraryClient</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.3.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.json</groupId> 
      <artifactId>json</artifactId> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

,我不得不增加更多的細節,你可以看到,當我用一個字符串投插圖中它的工作原理。和更多的細節,也許我應該刪除我的pom.xml以減少這個問題的代碼量,這是否有意義? |好多了?

+0

您是否試圖使用期望JSON格式源的對象讀取XML文件? – xpereta

回答

5

RestTemplate會爲了當您使用restTemplate.getForObject它會嘗試使用您通過類的默認構造函數來創建生成的對象

使用反射,然後嘗試填補所有的字段 在這種情況下,它不「知道如何創建JSONObject

爲了做到這一點,你必須:

  • 使用自己的HttpMessageConverterExtractor
  • 使用第二種方法JSONObject bookList = new JSONObject(str);