在Spring集成中将json请求参数设置为http标头

时间:2017-08-10 10:01:22

标签: spring spring-integration

我需要动态地将soap安全用户名和密码传递给out bound网关。为此,我尝试将json请求中收到的用户名设置为入站http头,然后将其设置为header-enricher中的soap操作,并在自定义的Wss4jSecurityInterceptor拦截器中使用它。当我尝试设置为http标头时,我得到例外:

嵌套异常是:

  

org.springframework.expression.spel.SpelEvaluationException:EL1008E:   在类型的对象上找不到属性或字段“abc.secUserName”   'org.springframework.util.LinkedMultiValueMap' - 也许不公开?]   有根本原因       org.springframework.expression.spel.SpelEvaluationException:EL1008E:在对象上找不到属性或字段'abc.secUserName'   类型'org.springframework.util.LinkedMultiValueMap' - 也许不是   上市?               在org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224)               在org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94)

我的弹簧配置如下:

<int-http:inbound-gateway request-channel="requestChannel" reply-channel="replyChannel"
        supported-methods="POST" message-converters="converters" request-payload-type="XXX"
        path="XXX" error-channel="errorChannel">
        <int-http:request-mapping consumes="application/json" produces="application/json" />
        <int-http:header name="secUserName" expression="#requestParams.abc.secUserName" />
    </int-http:inbound-gateway>


<int:chain input-channel="xxxChannel"  output-channel="responseChannel">
        <int-ws:header-enricher >
            <int-ws:soap-action expression="headers.secUserName"/>
        </int-ws:header-enricher>
        <int-ws:outbound-gateway uri="Xxx" 
             message-sender="messageSender" interceptor="xxx" marshaller="xxx">
            <int-ws:request-handler-advice-chain>
                <ref bean="outboundInterceptor" />
            </int-ws:request-handler-advice-chain>
        </int-ws:outbound-gateway>
    </int:chain>

JSON请求:

{
  "abc":{
    "secUserName" :"mmmm",
    "xyz": "xyz"
  }
}

请让我知道我做错了什么。如果有任何替代方案,请告诉我。

1 个答案:

答案 0 :(得分:0)

我认为您的abc是传入的请求正文,而不是您尝试在表达式中解析的查询参数。

尝试使用此表达式:body.abc.secUserName,因为恰好HttpEntity是评估上下文的根对象。