2017-07-08 11 views
-1

Ich habe versucht, ein Objekt von einer Anwendung zu einem anderen mit Rest zu senden.Ein Objekt über REST übertragen

Sender:

@Controller 
public class Sender { 
    @RequestMapping(value = "/comMessageApp-api/getMessages") 
    public String restGetMessages() { 
     String url = "http://localhost:8079/comMessageApp-api/responseMessages"; 
     HttpEntity<Dto2> entity = new HttpEntity<>(new Dto2()); 
     ResponseEntity<Dto2> response = restTemplate.exchange(url, HttpMethod.POST, entity, Dto2.class); 
    } 
} 

Empfänger:

@RestController 
public class Receiver { 
    @RequestMapping(value = "/comMessageApp-api/responseMessages") 
    public void restResponseMessages(HttpEntity<Dto2> request) { 
     System.out.println(request.getBody());  
    } 
} 

DTO:

public class Dto2 { 
    private String string = "Test string"; 

    public Dto2() { 
    } 

    public String getString() { 
     return string; 
    } 

    public void setString(String string) { 
     this.string = string; 
    } 
} 

Jackson wird verwendet, Serialisierung/Deserialisierung.

Irgendwelche Ideen, warum request.getBody() im Empfänger gedruckt ist null? Ich habe versucht, das Objekt innerhalb HttpEntity und in RequestEntity zu senden. Kein Erfolg in beiden Fällen. Auf der Empfängerseite bekomme ich immer null.

+0

Wenn Sie versuchen, das DTO an den Empfänger zu senden, sollten Sie eine POST-Methode anstelle von GET verwenden. GET dient zum Abrufen von Daten von der anderen Seite. Wenn Sie das DTO vom Empfänger abrufen möchten, müssen Sie das DTO im Empfänger erstellen und das DTO zurückgeben. –

+0

Ich habe es geändert, um zu veröffentlichen. Aber jetzt bekomme ich 'org.springframework.web.client.HttpClientErrorException: 403 null' Ausnahme auf der Senderseite. Die Anfrage erreicht niemals Empfänger – sva605

+0

. Bitte geben Sie einen [mcve] an. In diesem Fall müssen Sie wahrscheinlich minimale, vollständige Programme anzeigen: eines für den Server und eines für den Client. –

Antwort

0

Ihr Absender (Client) Seite zu verwenden, ganz in der Nähe ist, aber Ihr Server-Seite Void keinen Wert so ändern die Art zurück:

ResponseEntity<Void> response = restOps.exchange(url, HttpMethod.POST, entity, Void.class); 

Ihr Empfänger (Server) Seite ist auch nicht richtig eingerichtet, Sie müssen die HTTP-Methode auf [editiert] POST setzen. Sie müssen Spring auch mitteilen, dass der Anfragekörper (Ihre Restnutzlast) auf den Parameter abgebildet wird.

[EDIT] Brainfart, sollte die http-Methode auf POST auf erhalten Annotation eingestellt werden.

[Weiterer Vorschlag] 403 Fehler können auf Spring Security zurückzuführen sein, wenn Sie es eingeschaltet haben (überprüfen Sie Ihre POM, wenn Sie nicht sicher sind) versuchen Sie dies;

Sie möchten die Sicherheit erhöhen, sobald Sie wissen, dass es funktioniert.

+0

Funktioniert nicht. 'HttpMethod.POST' erzeugt 'org.springframework.web.client.HttpClientErrorException: 403 null' auf der Senderseite – sva605

+0

Seltsam - 403 ist ein verbotener Nachrichtencode, verwenden Sie Spring Security in Ihrer Anwendung? – GrumpyWelshGit

+0

Danke für die Erinnerung an Spring Security. Ja, ich benutze es und ich habe komplett vergessen, dass der csrf-Schutz deaktiviert werden muss. Jetzt funktioniert Rest – sva605

-1

versuchen @RequestMapping(method = RequestMethod.POST, produces = "application/json", consumes = "application/json")

+1

Warum sollten sie das versuchen? Was bewirkt es anders? Warum denkst du das? Was war das Problem in ihrem ursprünglichen Code? Ihre Antwort ist ohne diese Details ziemlich nutzlos. –

Verwandte Themen