我想根据用户的特定要求从后端调用另一个Web-api。例如,我想调用Google FCM发送消息API,以便在事件中向特定用户发送消息。
是否改造有什么方法来实现这一目标?如果没有,我该怎么做?
我想根据用户的特定要求从后端调用另一个Web-api。例如,我想调用Google FCM发送消息API,以便在事件中向特定用户发送消息。
是否改造有什么方法来实现这一目标?如果没有,我该怎么做?
Answers:
这个网站有一些使用spring的RestTemplate的漂亮示例。 这是一个如何获取简单对象的代码示例:
private static void getEmployees()
{
final String uri = "http://localhost:8080/springrestexample/employees.xml";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);
System.out.println(result);
}
尝试通过调用另一个API / URI而不是String来尝试获取自定义POJO对象详细信息作为输出,请尝试此解决方案。我希望这对于如何使用RestTemplate也将是清楚的,对您有所帮助,
在Spring Boot中,首先我们需要在@Configuration带注释的类下为RestTemplate创建Bean 。您甚至可以编写一个单独的类,并使用@Configuration进行注释,如下所示。
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
然后,你必须定义RestTemplate与@Autowired或@Injected服务/控制器,无论您在什么尝试使用RestTemplate下。使用以下代码,
@Autowired
private RestTemplate restTemplate;
现在,将看到如何使用上面创建的RestTemplate从我的应用程序中调用另一个api的部分。为此,我们可以使用多种方法,例如execute(),getForEntity(),getForObject()等。在这里,我将代码放在execute()的示例中。我什至尝试了另外两个,我遇到了将返回的LinkedHashMap转换为预期的POJO对象的问题。下面的execute()方法解决了我的问题。
ResponseEntity<List<POJO>> responseEntity = restTemplate.exchange(
URL,
HttpMethod.GET,
null,
new ParameterizedTypeReference<List<POJO>>() {
});
List<POJO> pojoObjList = responseEntity.getBody();
快乐编码:)
Modern Spring 5+答案使用WebClient
代替RestTemplate
。
WebClient
将特定的Web服务或资源配置为Bean(可以配置其他属性)。
@Bean
public WebClient localApiClient() {
return WebClient.create("http://localhost:8080/api/v3");
}
从您的服务中注入并使用bean。
@Service
public class UserService {
private static final Duration REQUEST_TIMEOUT = Duration.ofSeconds(3);
private final WebClient localApiClient;
@Autowired
public UserService(WebClient localApiClient) {
this.localApiClient = localApiClient;
}
public User getUser(long id) {
return localApiClient
.get()
.uri("/users/" + id)
.retrieve()
.bodyToMono(User.class)
.block(REQUEST_TIMEOUT);
}
}
为REST模板创建Bean,以自动连接REST模板对象。
@SpringBootApplication
public class ChatAppApplication {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ChatAppApplication.class, args);
}
}
通过使用RestTemplate-exchange()方法来使用GET / POST API。以下是在控制器中定义的post api。
@RequestMapping(value = "/postdata",method = RequestMethod.POST)
public String PostData(){
return "{\n" +
" \"value\":\"4\",\n" +
" \"name\":\"David\"\n" +
"}";
}
@RequestMapping(value = "/post")
public String getPostResponse(){
HttpHeaders headers=new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity=new HttpEntity<String>(headers);
return restTemplate.exchange("http://localhost:8080/postdata",HttpMethod.POST,entity,String.class).getBody();
}
请参考本教程[1]
[1] https://www.tutorialspoint.com/spring_boot/spring_boot_rest_template.htm
改装有什么方法可以做到这一点吗?如果没有,我该怎么做?
是
Retrofit是适用于Android和Java的类型安全的REST客户端。Retrofit将您的HTTP API变成Java接口。
有关更多信息,请参见以下链接
https://howtodoinjava.com/retrofit2/retrofit2-beginner-tutorial
RestTemplate