2016-10-17 6 views
1

Ich muss die Zeichenfolge in den Headern aufgeteilt teilen.Header - spel, um die Zeichenfolge zu teilen

<int:header name="plans-array" expression="headers['plans'].split(',')"/> 

Wie Sie dieses String-Array in Liste wie die unten, die die Liste konvertiert automatisch machen.

Ich habe versucht, wie unten, aber nicht richtig funktioniert.

<int:header name="plans-list" expression="T(java.util.Arrays).asList(headers['plans'].split(','))"/> 

Integration xml

<int:channel id="splitChannel"/> 
<int:header-enricher input-channel="splitChannel"> 
    <int:header name="isPlanExist" expression="T(java.util.Arrays).asList((headers['plans'].split(','))).contains('plan1')"/> 
</int:header-enricher> 

JUnit

@Autowired 
    @Qualifier("splitChannel") 
    private MessageChannel splitChannel; 

    @Test 
    public void testSplit() { 

String somePayload = "somePayload"; 
Message<String> stringPayload = MessageBuilder.withPayload(somePayload) 
    .setHeader("plans", "plan1,plan2") 
    .build(); 

MessagingTemplate template = new MessagingTemplate(); 
Assert.assertEquals(true, template.sendAndReceive(this.splitChannel, stringPayload).getHeaders().get("isPlanExist")); 
+0

Dies funktioniert gut und Pläne-Array String [], aber nur den Fehler, der oben in den erwähnten bekommen Debug-Modus. –

+0

Was ist 'Debug-Modus'? Wie können wir es lokal reproduzieren? Danke –

+0

Sorry für die späte Antwort Artem. Ich meinte Debug-Protokolle. Ich bekomme das Array von String nach der Trennung mit Komma getrennt. Bitte schlagen Sie die Lösung für die bearbeitete Frage vor. –

Antwort

1

Gut, jetzt sehe ich Ihr Problem.

Sie haben Code wie T(java.util.Arrays).asList((headers['plans'].split(',')))

In Java funktioniert es gut, weil Compiler ein Argument mit Array-Typ als varargs behandeln.

Hier haben wir einen SpEL, der in den meisten Fällen auf dem Aufruf der Reflektionsmethode basiert. Also, es gibt keine Compiler-Optimierung und wir enden mit der Tatsache List<String[]> mit einem Element, nicht wie Sie erwarten, mit zwei Elementen List<String>.

Ich würde nicht sagen, dass es ein SPEL-Problem ist. So funktioniert Java Reflection.

Um Ihr Problem zu beheben, sollten Sie prüfen, einig anderen array -> list Dienstprogramm Bypass verwenden varargs Problem, zum Beispiel:

T(org.springframework.util.CollectionUtils).arrayToList(headers['plans'].split(',')).contains('plan1') 
+0

Got it.. funktioniert perfekt !! Tut mir wirklich leid, wenn meine Frage Sie verwirrt. –

Verwandte Themen