1

マイ出典APP:routingKeyのPOJOに適用されるSPEL式の使い方は?

@InboundChannelAdapter(value = RequestSource.CHANNEL_NAME) 
public Event eventMessageSource() throws Exception { 
    final Random r = new Random(); 
    Event event = generateSampleEvent(EventType.values()[r.nextInt(EventType.values().length - 1)]); 
    System.out.println("---- Putting now ==> " + event); 
    return event; 
} 

マイapplication.properties:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'eventType' cannot be found on object of type 'byte[]' - maybe not public? 
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224) 
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94) 
at org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:46) 

私はSPELを使用するためのアプリケーション/ JSONを使用しないでください:

logging.level.=INFO 
server.port=0 
logging.file=events.log 
server.port=0 
spring.cloud.stream.bindings.requestChannel.destination=events-exchange 
spring.cloud.stream.bindings.requestChannel.content-type=application/json 
spring.cloud.stream.bindings.requestChannel.binder=rabbit 
spring.cloud.stream.bindings.requestChannel.group=eventconsumersgroup 
spring.cloud.stream.rabbit.bindings.requestChannel.producer.routing-key-expression=payload.eventType 

例外は、このですか?私は右のプロパティのセットがここにないのですか?

答えて

1

ルーティングキー式が評価される前に、ペイロードはすでにbyte[]に変換されています。

メッセージヘッダーを使用できます。

@InboundChannelAdapter(value = RequestSource.CHANNEL_NAME) 
public Message<Event> eventMessageSource() throws Exception { 
    final Random r = new Random(); 
    Event event = generateSampleEvent(EventType.values()[r.nextInt(EventType.values().length - 1)]); 
    System.out.println("---- Putting now ==> " + event); 
    return new GenericMessage<>(event, Collections.singletonMap("type", event.getType()); 
} 

、その後、式はheaders.typeまたはheaders['type']です。

+0

ありがとうございます。 – user1189332

関連する問題