java - 如何使用 Feign Client Spring Boot 从另一个服务获取数据(错误:406)
问题描述
当我使用 Feign 客户端从一个服务(API 网关)调用另一个服务(用户服务)时,出现错误
有两种服务
- 用户服务
- API网关
在我的 API 网关中
FeignClient
@FeignClient(contextId = "user-by-email",name = "user-service")
@Service
public interface UserByEmail {
@RequestMapping(value = "/email/{email}", consumes= MediaType.APPLICATION_JSON_VALUE)
User findByEmail(@PathVariable("email") String email);
}
控制器
@RequestMapping("/test")
public class TestController {
@Autowired
private UserByEmail userByEmail;
@GetMapping(value = "/{email:.+}")
public ResponseEntity testUser(@PathVariable("email") String username) {
return ResponseEntity.ok(userByEmail.findByEmail(username));
}
}
我需要调用以下(用户服务)
控制器
@EnableFeignClients
@RestController
public class UserController extends BaseController<User> {
@Autowired
private UserService userService;
@PostConstruct
public void binder() {
init(this.userService);
}
@GetMapping(value = "/email/{email}")
public ResponseEntity findByEmail(@PathVariable("email") String email) {
return ResponseEntity.ok(userService.findByEmail(email));
}
}
存储库
@Override
public User findByEmail(String email) {
Query query = new Query(Criteria.where("email").is(email).and("status").is(1));
return mongoOperations.findOne(query, User.class);
}
服务
@Override
public User findByEmail(String email) {
return userDao.findByEmail(email);
}
我得到的错误是..
<Map>
<timestamp>1583924335777</timestamp>
<status>406</status>
<error>Not Acceptable</error>
<message>Could not find acceptable representation</message>
<trace>org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:246)
谁能解释我的代码有什么问题,并提供您有价值的解决方案
(基本上我需要在API-gateway中创建Security,以控制其他服务的访问)
解决方案
尝试如下实现 Feign 客户端:
@FeignClient(name = "user-service")
public interface UserByEmail {
@RequestMapping(method = RequestMethod.GET, value = "/email/{email}", consumes = "application/json")
User findByEmail(@PathVariable("email") String email);
}
还要确保通过 JSON 匹配器User
POJO 传递的字段。
推荐阅读
- database - Neo4j 数据库播种需要多长时间?
- r - 如何找到向量的两个子集和之间的最大和最小严格正差?
- python-3.x - 在python中使用递归查找通用树中的节点
- flask - sqlalchemy db 在 apscheduler 的函数调用中找不到应用程序
- r - 动态地将变量列添加到R中的数据框
- python - 变量说明
- nestjs - 为什么总是在 NestJS 中调用带有查询参数的第一个 getter?
- android - 编译数据绑定时出错:-任务“:app:kaptDebugKotlin”执行失败
- javascript - 我想使用所选按钮的 id,但如何从中获取 id?this.id 不起作用
- azure-active-directory - 由于服务计划依赖性,无法使用 MS 图表分配 O365 许可证