2014-12-31 5 views
7

Ich versuche, einen einfachen Warteschlangen-Handler zu erhalten, der mit dem Spring Cloud-Framework arbeitet. Ich habe erfolgreich den Message-Handler die Warteschlange abrufen, jedoch. Das Problem, das ich sehe, ist, dass, wenn ich eine Nachricht in die Warteschlange einstelle, mein Handler die Nutzlast nicht in das erforderliche Java-Objekt aufheben kann.Spring Cloud - SQS

@MessageMapping("MyMessageQueue") 
@SuppressWarnings("UnusedDeclaration") 
public void handleCreateListingMessage(@Headers Map<String, String> headers, MyMessage message) { 
    //do something with the MyMessage object 
} 

Der Fehler Ich erhalte ist

No converter found to convert to class MyMessage 

Wie ich es verstehe, sollte die @MessageMapping Jackson verwenden meine JSON Nutzlast in eine MyMessage Objekt entordnen. Es beklagt sich jedoch, dass es keinen Konverter finden kann.

Ist jemand auf dieses gestoßen?

Ich verwende die Version 1.0.0.BUILD-SNAPSHOT von Spring Cloud.

Antwort

11

Jackson wird nur verwendet, wenn in der SQS-Nachricht ein contentType Header mit dem Wert application/json gesetzt ist. Andernfalls wissen die Konverter nicht, welche Art von Inhalt in der Payload der Nachricht enthalten ist, und der richtige Konverter kann nicht ausgewählt werden.

Wenn Sie QueueMessagingTemplate#convertAndSend wie in der reference application verwenden, wird der Header contentType automatisch festgelegt.

+0

Vielen Dank für das Aufräumen. Ich kann bestätigen, dass das MyMessage-Objekt nach dem Hinzufügen des contentType-Headers wie erwartet erstellt wird. – Slihp

Verwandte Themen