Spring Boot:跨不同服务类返回相同数据类型的多个Bean方法

c9qzyr3d  于 2022-10-23  发布在  Spring
关注(0)|答案(1)|浏览(264)

这两个是服务类,它对其他服务进行http调用以检索json响应。我只是想知道这是不是一个正确的使用资源转换器的方法,它可以帮助将json响应字符串转换为POJO。
B您是否注意到,这两个单独的类包含自己的ResourceConverter Bean方法。我不能创建一个可以由所有类共享的方法,因为我们需要DummyResponse.classTestResponse.class作为参数。那么,这种方式可以接受吗?有多个Bean方法返回相同的类型,但在不同的类中,这是一种良好的实践吗?

  1. @Service
  2. public class TestClient(){
  3. @Bean
  4. private ResourceConverter getTestResponseConverter(){
  5. ObjectMapper mapper = new ObjectMapper();
  6. mapper.setDeserialization(DeserializationFeature.ALLOW_UNKNOWN_PROPERTIES);
  7. ResourceConverter converter = new ResourceConverter(mapper,TestResponse.class);
  8. return converter;
  9. }
  10. private TestResponse getTestResponse(){
  11. //okhttp call to get the json, this is not actual syntax for call, not relevant in this context
  12. String responseBodyString = okhttp.call(request);
  13. JSONAPIDocument<TestResponse> testDocument = getTestResponseConverter().readDocument(responseBodyString, TestResponse.class);
  14. return testDocument.get();
  15. }
  16. }
  17. @Service
  18. public class DummyClient(){
  19. @Bean
  20. private ResourceConverter getDummyResponseConverter(){
  21. ObjectMapper mapper = new ObjectMapper();
  22. mapper.setDeserialization(DeserializationFeature.ALLOW_UNKNOWN_PROPERTIES);
  23. ResourceConverter converter = new ResourceConverter(mapper,DummyResponse.class);
  24. return converter;
  25. }
  26. private Dummy getDummyResponse(){
  27. //okhttp call to get the json, this is not actual syntax for call, not relevant in this context
  28. String responseBodyString = okhttp.call(request);
  29. JSONAPIDocument<DummyResponse> dummyDocument = getDummyResponseConverter().readDocument(responseBodyString, DummyResponse.class);
  30. return testDocument.get();
  31. }
  32. }
6ioyuze2

6ioyuze21#

您应该/可以使用@Primary来注解在存在@Autowired ResourceConverter...而Spring无法区分时优先的那个。
您可以使用@Qualifier来“命名”每个组件,然后在@Autowire d Bean上使用相同的注解来获得您想要的组件。
所以:

  1. @Bean
  2. private ResourceConverter testResponseConverter(){
  3. ...
  4. }

  1. @Bean
  2. @Primary
  3. private ResourceConverter dummyResponseConverter(){
  4. ...
  5. }

您可以执行以下操作:

  1. @Autowired ResourceConverter rc; // Gets the @Primary dummy one
  2. @Autowired @Qualifier("testResponseConverter") ResourceConverter rc2; // Gets the corresponding testResponseConverter

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Qualifier.html

展开查看全部

相关问题