Spring integration 我如何从我的通道(spring integration,DSL)转换我的对象?
我有一个Integrationflow,它会返回一条消息,现在我想在第二个通道中验证它,在发送回后,我想转换它。 但转型失败了Spring integration 我如何从我的通道(spring integration,DSL)转换我的对象?,spring-integration,Spring Integration,我有一个Integrationflow,它会返回一条消息,现在我想在第二个通道中验证它,在发送回后,我想转换它。 但转型失败了 @Bean public IntegrationFlow httpUserGetUserByUsername() { return IntegrationFlows.from(httpGetGateUsersGetUserByUsername()) .channel("http.users.getUserByUse
@Bean
public IntegrationFlow httpUserGetUserByUsername() {
return IntegrationFlows.from(httpGetGateUsersGetUserByUsername())
.channel("http.users.getUserByUsername").handle("userEndpoint", "getUserByUsername")
.channel("http.users.checkUserAuth").handle("userEndpoint","checkUserByUsername")
.transform(User u -> new UserResponseHelper(u))
.get();
}
public void checkUserByUsername(消息msg){
MessageChannel replayChannel=(MessageChannel)msg.getHeaders().getReplyChannel();
用户u=msg.getPayload();
if(Authorization.isAllowByUsername(u.getUsername())){
replayChannel.send(MessageBuilder.withPayload(u.build());
}否则{
replayChannel.send(MessageBuilder.withPayload(新的ResponseEntity(新的ApiResponse(HttpStatus.FORBIDDEN,false,“您不允许获取此ressource”)、HttpStatus.FORBIDDEN)).build();
}
}
我得到一个拥有8个属性的用户,而我期望的是一个拥有4个道具的用户
嗯。我知道你有什么问题了。你真的错过了一个事实,你的.transform(User u->new userresponsehelp(u))
根本没有被调用。所以,你的“转型失败”让我困惑
那么,这里发生了什么:
void checkUserByUsername(Message msg)
返回void
。因此,没有任何东西可以包装到输出消息中。从这里开始,任何东西都不会触发流中的下一个.transform()
checkUserByUsername(Message msg)
到replyChannel
报头的所有内容都被发送到入站网关等待回复的位置ApiResponse
。为什么不抛出一个异常
,例如ResponseStatusException
?这将在REST层上得到正确处理,并作为错误返回给REST客户端checkUserByUsername()
方法返回u
,否则抛出异常。这样,用户
对象将进入您的.transform(User u->new userresponsehelp(u))
-一切都好
您刚刚混淆了void
不会触发转换,而replyChannel
只是用于直接向启动器网关发送应答
我得到一个拥有8个属性的用户,而我期望的是一个拥有4个道具的用户
嗯。我知道你有什么问题了。你真的错过了一个事实,你的.transform(User u->new userresponsehelp(u))
根本没有被调用。所以,你的“转型失败”让我困惑
那么,这里发生了什么:
void checkUserByUsername(Message msg)
返回void
。因此,没有任何东西可以包装到输出消息中。从这里开始,任何东西都不会触发流中的下一个.transform()
checkUserByUsername(Message msg)
到replyChannel
报头的所有内容都被发送到入站网关等待回复的位置ApiResponse
。为什么不抛出一个异常
,例如ResponseStatusException
?这将在REST层上得到正确处理,并作为错误返回给REST客户端checkUserByUsername()
方法返回u
,否则抛出异常。这样,用户
对象将进入您的.transform(User u->new userresponsehelp(u))
-一切都好
您刚才感到困惑的是,
void
不会触发转换,replyChannel
只是用于直接向启动器网关发送应答。转换是如何失败的?不幸的是你没有和我们分享这些信息。。。你期望什么,什么不起作用?我将得到整个用户对象,但我只想得到一些属性,如名称、角色。我得到了一个拥有8个属性的用户,我所期望的是一个拥有4个属性的用户,转换是如何失败的?不幸的是你没有和我们分享这些信息。。。你期望什么,什么不起作用?我将得到整个用户对象,但我只想得到一些属性,如名称、角色。我得到一个拥有8个属性的用户,而我期望的是一个拥有4个道具的用户
public void checkUserByUsername(Message<User> msg) {
MessageChannel replayChannel = (MessageChannel) msg.getHeaders().getReplyChannel();
User u = msg.getPayload();
if (Authorization.isAllowByUsername(u.getUsername())) {
replayChannel.send(MessageBuilder.withPayload(u).build());
}else{
replayChannel.send(MessageBuilder.withPayload(new ResponseEntity(new ApiResponse(HttpStatus.FORBIDDEN,false,"You are not allow to get this ressource"), HttpStatus.FORBIDDEN)).build());
}
}