gpt4 book ai didi

java - Spring Boot-MVC-RestTemplate : Where to initialize a RestTemplate for a MVC application to consume remote RESTful services

转载 作者:行者123 更新时间:2023-12-01 19:49:30 29 4
gpt4 key购买 nike

我将开发一个简单的 Spring MVC Web 应用程序,它将使用 Heroku 上的远程 RESTful 服务。

我希望 MVC Web 应用程序根据 Controller 调用 REST 服务。例如

  • localhost:8080/items 调用 http://{REMOTE_SERVER}/api/items
  • localhost:8080/users 调用 http://{REMOTE_SERVER}/api/users

等等等等

我已经关注了Spring官方的Spring Boot文档"Serving Web Content with Spring MVC"以创建带有 GreetingController 的 Hello World 应用程序为例。我想利用Spring的RestTemplate来调用REST服务。

我的应用程序类:

@SpringBootApplication
public class Application {

public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);

System.out.println("Let's inspect the beans provided by Spring Boot:");

}
}

我的 GreetingController:

@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name,
Model model) {
model.addAttribute("name", name);
return "greeting";
}
}

我需要如何以及在哪里初始化 RestTemplate,使 Singleton 类成为 Application 类的 main 函数,并允许它由多个 Controller 或每个 Controller 共享一个?完成此类任务的最佳实践是什么?

最佳答案

看看 official documentation 。事实上,您可以重用模板并实例化一次,方法是将其发布为主配置类中的 @Bean (在您的情况下为 @SpringBootApplication)

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}

并通过将其 Autowiring 为属性(或通过构造函数注入(inject))将其注入(inject)到 GreetingController 中:

@Autowired
private RestTemplate restTemplate;

当然,如果您想自定义它,您也可以在 Controller 中注入(inject) RestTemplateBuilder 并在本地调用 build

private RestTemplate restTemplate;
public GreetingController(RestTemplateBuilder builder) {
this.restTemplate = builder.build(); // modify it before building
}

关于java - Spring Boot-MVC-RestTemplate : Where to initialize a RestTemplate for a MVC application to consume remote RESTful services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51958805/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com