Как обрабатывать пробелы в параметре исходящего запроса jdbc? - PullRequest
0 голосов
/ 14 мая 2018

Я не знаю, связано ли это с интеграцией, но в моем контексте я пытаюсь ссылаться на значение полезной нагрузки по ключу, который содержит пробелы:

<int-jdbc:outbound-channel-adapter 
    query="INSERT INTO table (serial, dealer_code) VALUES (:payload[SERIES], :payload[DEALER CODE])"
    data-source="dbDataSource">

</int-jdbc:outbound-channel-adapter>

Пока параметр :payload[SERIES] работает, пока я добавляю второй, ни один из:

  • :payload[DEALER CODE]
  • :payload['DEALER CODE']
  • :payload[&quot;DEALER CODE&quot;]

Работа, причем последние два перерыва с:

org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'payload[': Invalid property 'payload[' of bean class [org.springframework.messaging.support.GenericMessage]: Bean property 'payload[' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

Хотя в другом месте, в другой конфигурации enpoint, я использую кавычки:

<int-http:inbound-channel-adapter id="/api/requests"
    ...
    status-code-expression="T(org.springframework.web.context.request.RequestContextHolder).requestAttributes.request.method.equals('POST') ? 201 : 200">

</int-http:inbound-channel-adapter>

Я работал над этим добавлением ExpressionEvaluatingSqlParameterSourceFactory (как описано в Адаптер входящего канала ):

<int-jdbc:outbound-channel-adapter 
    query="INSERT INTO table (serial, dealer_code) VALUES (:serial, :dealerCode)"
    sql-parameter-source-factory="spelSource"
    data-source="dbDataSource">

</int-jdbc:outbound-channel-adapter>

<bean id="spelSource"
  class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
    <property name="parameterExpressions">
        <map>
            <entry key="serial" value="payload['SERIES']"/>
            <entry key="dealerCode" value="payload['DEALER CODE']"/>
        </map>
    </property>
</bean>

</int-jdbc:outbound-channel-adapter>

Но поскольку поля полезной нагрузки просто читаются, это кажется слишком большим.

Использую ли я здесь неправильный синтаксис?

1 Ответ

0 голосов
/ 14 мая 2018

Попробуйте использовать ExpressionEvaluatingSqlParameterSourceFactory для атрибута sql-parameter-source-factory <int-jdbc:outbound-channel-adapter >. И да, действительно, это выражение должно быть таким: :payload['DEALER CODE'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...