SpringCloud传递Fegin接口,服务端将查询出来的数据放入ResponseEntity的Body当中,客户端拿到的Body总是为null。
项目当中所有SpingMVC的接口的返回结果集都是用ResponseEntity来返回,我在介个服务端的接口当中,将查询出来的数据放入ResponseEntity的Body当中,客户端调用SpringCloud Feign接口接收到的ResponseEntity当中的Body总是null.
Fegin配置文件
@Configuration
@ConditionalOnClass(RequestContext.class)
public class FeignClientConfiguration {
@Bean
public RequestInterceptor headerTokenInterceptor() {
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate requestTemplate) {
HttpServletRequest request = RequestContext.getHttpRequest();
if(request == null)
return;
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
requestTemplate.header(name, request.getHeader(name));
}
}
}
};
}
}
服务端接口:
/**
* 通过用户名称查询用户信息
* @param username
* @return
*/
@PostMapping(value = "/findUserByUserName")MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = "通过用户名称查询用户信息接口")
@CrossOrigin(origins = {"*"}, allowCredentials = "true")
public ResponseEntity findUserByUserName(@RequestParam(value = "username") String username) {
log.debug("findUserByUserName parameter : {}", username);
UserVo user = new UserVo();
user.setUsername(username);
user = userInfoService.findUserList(user).get(0);
if (user != null) {
log.debug("findUserByUserName success!");
ResponseResult result = ResponseResult.success(user);
ResponseEntity responseEntity = ResponseEntity.ok().body(result);
ResponseEntity responseEntity2 = ResponseEntity.ok(result);
ResponseEntity responseEntity3 = new ResponseEntity(result, HttpStatus.OK);
ResponseEntity responseEntity4 = new ResponseEntity(user, HttpStatus.CONTINUE);
return responseEntity3;
}
log.debug("findUserByUserName failed!");
return ResponseEntity.ok(ResponseResult.failure("通过用户名称查询用户信息接口失败"));
}
Fegin接口
@FeignClient(value = "service-userserver-xxj", /*configuration = FeignClientConfiguration.class ,*/ url="localhost:5090" )
public interface UserClient {
/**
* 通过用户名称查询用户信息
* @param username
* @return
*/
@PostMapping(value = "/api/userserver_xxj/user/findUserByUserName")
public ResponseEntity findUserByUserName(@RequestParam(value = "username") String username);
}
客户端接口
@RequestMapping("/auth")
@RestController
public class AuthController {
// 用户Fegin接口
@Resource
private UserClient userClient;
@ResponseBody
@RequestMapping(value = "/findUserByUserName", method = RequestMethod.POST)
@ApiOperation(value = "查询用户信息", notes = "查询用户信息")
public ResponseEntity findUserByUserName(@RequestBody AddUserInfoCnd user) throws Exception{
// 查询用户信息
ResponseEntity responseEntity = userClient.findUserByUserName(user.getUsername());
ResponseResult result = (ResponseResult)responseEntity.getBody();
Object data = result.getData();
UserVo userVo = (UserVo)(data);
if (userVo != null) {
return ResponseEntity.ok(ResponseResult.success(userVo));
}
return ResponseEntity.ok(ResponseResult.failure("用户注册失败"));
}
}
1,开始用Swagger进行测试
2、断点跳入客户端调用方法
3、断点进入FeginConfig配置类的请求头部拦截器当中
4、断点通过SpringCloud的Feign接口进入服务端的Controller接口当中
5、将查询到的用户数据放入返回结果集的Body当中
6、客户端Controller调用SpringCloud的Feign接口返回的结果集当中Body却为null
我今天,做了多次测试,整整搞了一天,把所有的Filter、Interceptor等过滤器和拦截器和SpringSecurity拦截配置都停掉了,还是报这个问题!!!
有没有大哥大姐们遇到过这个问题,本人在这里急求这个问题的答案。
小弟先在这里谢谢各位了!!!