Montag, Januar 27, 2020

RestTemplate kann nicht abgerufen JSONObject

Kann ich nicht Holen JSONObject Volltreffer, dieser code funktioniert:

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

aber dieser code nicht:

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

Was das problem sein könnte? Es gibt nicht die Fehler, sondern ich habe eine leere JSONObject am Ende.

meine 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>

und ich muss hinzufügen, ein bisschen mehr details, die Sie sehen können, wenn ich mit einem string zu casten dazwischen funktioniert es. und ein bisschen mehr details, vielleicht sollte ich meine löschen pom.xml zu reduzieren die Menge an code in dieser Frage, würde das Sinn machen? | Okay mehr?

  • Sind Sie versuchen, zu Lesen eine XML-Datei mit einem Objekt, der erwartet, dass aus einer JSON-formatierten source?
InformationsquelleAutor EralpB | 2017-01-25

1 Kommentar

  1. 6

    RestTemplate wird reflektion verwenden, um das resultierende Objekt

    Wenn Sie restTemplate.getForObject es wird versuchen, den default-Konstruktor der Klasse übergeben und es wird dann versucht, zu füllen alle seine Felder
    In diesem Fall kommt es nicht wissen, wie Sie die JSONObject

    Um es zu tun müssen Sie:

    • verwenden Sie Ihre eigenen HttpMessageConverterExtractor
    • mit dem zweiten Ansatz JSONObject bookList = new
      JSONObject(str);
    • Sie würde denken, dies wäre eine Ausnahme, wie auch in anderen Sprachen statt, zu scheitern, schweigend.

Kostenlose Online-Tests