OpenFeign服务方返回null对象,调用方得到的却是一个具体对象,但是字段为null
问题描述
OpenFeign服务方返回null对象,调用方得到的却是一个具体对象,但是字段为null
问题出现的环境背景及自己尝试过哪些方法
在做注册功能的时候通过Auth模块传递参数username去user模块查找,然后返回user对象(无论是否为null),然后对user模块返回内容进行检验,根据是否为空进行后面的逻辑操作,但是当我user模块返回的user对象为null的时候auth模块得到的user对象不为Null,但是他的字段为null导致判空操作不命中.目前是通过获取返回的userId进行判空进行替代解决方案
相关代码
AuthController
@PostMapping( "/regist/password" )
public String regist( @RequestBody @Valid UserRegistByPasswordReqVo userRegistByPasswordReqVo ,
BindingResult result ){
if( result.hasErrors() ) {
throw new BusinessException( "-1" , Objects.requireNonNull( result.getFieldError() ).getDefaultMessage() );
}
User user = userService.findUser( userRegistByPasswordReqVo.getUsername() );
//目前的替代方案
//if( user.getId() != null ) {
//throw new AuthException( //AuthErrorCode.ACCOUNT_EXIST_USERNAME );
}
// 通过判断user是否为null的方案
Optional.ofNullable( user ).ifPresent( u -> {
if( u.getId() != null ) {throw new AuthException( AuthErrorCode.ACCOUNT_EXIST_USERNAME );}
} );
userService.addUser( userRegistByPasswordReqVo );
return "success";
}
Auth模块的UserService
@FeignClient( "demos-user" )
public interface UserService{
@GetMapping( "/user/{username}" )
User findUser( @PathVariable String username );
@PostMapping("/user")
void addUser( UserRegistByPasswordReqVo userRegistByPasswordReqVo );
}
UserController
@PostMapping
@IgnoreResponseAdvice(errorDispose = false)
public User addUser( @RequestBody UserRegistByPasswordReqVo userRegistByPasswordReqVoVo ){
return userService.addUser( userRegistByPasswordReqVoVo );
// throw new UserException( UserErrorCode.TEST_ERROR );
}
@GetMapping( "/{username}" )
public User findUser( @PathVariable String username ){
try {
Thread.sleep( 2000L );
} catch( InterruptedException e ){
e.printStackTrace();
}
return userService.findByUsername( username );
}
你期待的结果是什么?实际看到的错误信息又是什么?
期待的结果:
当userService.findUser()
返回Null的时候
Optional.ofNullable( user ).ifPresent( u -> {
if( u.getId() != null ) {throw new AuthException( AuthErrorCode.ACCOUNT_EXIST_USERNAME );}
} );
不会抛出异常,user为null
实际看到的错误:
findUser查询出的对象为null,
通过debug可以看到user为null,没有地址值,而调用方的断点却显示有地址值,字段为null.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到问题了,是因为我之前引用了spring-cloud-purgeteam导致的,取消引用就好了