2016-07-17 4 views
0

Je peux utiliser un <int-http:outbound-channel-adapter ... /> pour envoyer un objet avec des informations stockées dans l'en-tête.Intégration de ressort: Utilisation de l'en-tête cusom pour l'adaptateur de canal sortant http:

Après travaux quand je l'appelle l'<int-http:inbound-channel-adapter ... /> aime suit:

public void openTicket(final Profile profile, final Ticket ticket) { 
    final HttpHeaders headers = new HttpHeaders(); 
    headers.set("profile", profile.toString()); 
    final HttpEntity<Ticket> entity = new HttpEntity<Ticket>(ticket, headers); 
    template.exchange(URL, HttpMethod.PUT, entity, Ticket.class); 
} 

Cela appelle mon inboung-canal adaptateur succès avec le profil donné dans les en-têtes:

<int-http:inbound-channel-adapter 
    channel="api_app_integration_request_channel" 
    supported-methods="PUT" 
    path="/process/ticket" 
    request-payload-type="*.model.Ticket" 
    mapped-request-headers="profile" 
    error-channel="internal-client-rest-ticket-error-channel" 
> 
    <int-http:request-mapping consumes="application/json" /> 
</int-http:inbound-channel-adapter> 

Qu'est-ce que le travail ne marche appelle le service via l'adaptateur de canal sortant, l'appel lui-même fonctionne, mais mon «profil» d'en-tête est parti.

<int-http:outbound-channel-adapter 
    channel="client_rest_ticket_outbound_channel" 
    http-method="PUT" 
    url="http://localhost:8080/process/ticket" 
    mapped-request-headers="profile" 
/> 

J'utilise Spring-Boot 1.3.6.RELEASE.

Répondre

1

Les en-têtes personnalisés sont (actuellement) mappés avec un préfixe X- par défaut; pour les mapper sans le préfixe, vous devez câbler un DefaultHttpHeaderMapper avec userDefinedHeaderPrefix défini sur null (ou "") ainsi que le (s) nom (s) d'en-tête sortant que vous souhaitez mapper.

Voir the documentation.

EDIT:

<bean class="org.springframework.integration.http.support.DefaultHttpHeaderMapper" id="headerMapper" 
    p:userDefinedHeaderPrefix="" 
    p:inboundHeaderNames="profile" 
    p:outboundHeaderNames="profile" 
/> 
+0

Hey Gary, Merci pour votre réponse. Qu'est-ce qui est considéré comme une bonne pratique? Je suppose que je garde le préfixe 'X-'. Est-il utilisé pour marquer des clés d'en-tête personnalisées ou quelle est la moyenne de 'X-'? –

+0

Je crois que l'intention initiale était d'éviter les collisions avec les futures vedettes-types. Je crois me rappeler que le courant nous pousse à ne pas préfixer les en-têtes personnalisés, alors nous pensons changer la valeur par défaut dans 5.0. –

+0

Merci Gary, parce que je ne peux pas mettre en forme le code dans les commentaires, j'ai édité votre réponse avec la configuration que j'ai faite. J'espère que c'est bon –