Java 找不到RestOperations bean

Java 找不到RestOperations bean,java,rest,api,spring-boot,Java,Rest,Api,Spring Boot,我正在尝试为我的spring boot项目设置基本身份验证。到目前为止,我已经做到了: com.app.apitool.RESTConsumer包中的CallAPI.java public class CallAPI { RestTemplate restTemplate = new RestTemplate(); @Autowired RestTemplateBuilder restTemplateBuilderObj; @Autowired BasicAuthSetup basicAu

我正在尝试为我的spring boot项目设置基本身份验证。到目前为止,我已经做到了:

com.app.apitool.RESTConsumer包中的CallAPI.java

public class CallAPI {

RestTemplate restTemplate = new RestTemplate();

@Autowired
RestTemplateBuilder restTemplateBuilderObj;

@Autowired
BasicAuthSetup basicAuthObj;

@Autowired
RestOperations rest;

String endpointURL = "";

public String pingAPi() {
    HttpEntity<String> request = new HttpEntity<String>(basicAuthObj.getHeaders());

    ResponseEntity<String> response = rest.exchange(endpointURL, HttpMethod.GET, request, String.class);

    System.out.println(response.getBody());
    return response.getBody();
}
}
@Component
public class BasicAuthSetup {
private String plainCreds = "id@account1:password";
private String base64Creds = Base64.getEncoder().encodeToString(plainCreds.getBytes());

@Bean
public HttpHeaders getHeaders() {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Basic" + base64Creds);
    System.out.println("Auth created: "+headers);
    return headers;
}                  
}
运行时,我得到以下异常:


应用程序无法启动


说明:

com.appd.apitool.restcummer.CallAPI中的字段rest需要一个 键入“org.springframework.web.client.restcomperations”,该操作无法 找到了

行动:

考虑定义类型为的bean 配置中的“org.springframework.web.client.RestOperations”

我在谷歌上搜索了这个错误,发现了一个类似的问题(如果不是相同的话),我正在遵循上面提到的解决方案

我之所以决定创建一个新问题,是因为我没有看到在第一个链接所在的帖子中提到的任何解决方案。另外,我还不熟悉spring引导框架

com.App.apitool包中的MainApp.java

@SpringBootApplication
@RestController
public class App {

private static final Logger log = org.slf4j.LoggerFactory.getLogger(App.class);


@Autowired
private CallAPI callAPIobj;

public static void main(String[] args) {
    SpringApplication.run(App.class, args);
}

@RequestMapping("/api")
public String testAPI() {
    return callAPIobj.pingAPi();
}

}

好的,在您的Maven项目中,您的基本身份验证设置将是您的bean配置的好地方:

BasicAuthSetup.java:

package com.app.apitool.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.util.Base64;

@Configuration
public class BasicAuthSetup {

    private static final String plainCreds = "id@account1:password";
    private static final  String base64Creds = Base64.getEncoder().encodeToString(plainCreds.getBytes());

    @Bean
    public HttpHeaders getHeaders() {

        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Basic" + base64Creds);

        return headers;
    }

    @Bean
    public RestTemplate restTemplate() {

        RestTemplate restTemplate = new RestTemplate();
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(new ObjectMapper());
        restTemplate.getMessageConverters().add(converter);

        return restTemplate;
    }

    @Bean
    public HttpEntity<String> stringHttpEntity() {
        return new HttpEntity<>(getHeaders());
    }
}
package com.app.apitool.config;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.http.HttpEntity;
导入org.springframework.http.HttpHeaders;
导入org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
导入org.springframework.web.client.rest模板;
导入java.util.Base64;
@配置
公共类基本设置{
私有静态最终字符串plainCreds=”id@account1:密码”;
私有静态最终字符串base64Creds=Base64.getEncoder().encodeToString(plainCreds.getBytes());
@豆子
公共HttpHeaders getHeaders(){
HttpHeaders=新的HttpHeaders();
标题。添加(“授权”、“基本”+base64Creds);
返回标题;
}
@豆子
公共RestTemplate RestTemplate(){
RestTemplate RestTemplate=新RestTemplate();
MappingJackson2HttpMessageConverter=新的MappingJackson2HttpMessageConverter();
setObjectMapper(新的ObjectMapper());
restemplate.getMessageConverters().add(converter);
返回REST模板;
}
@豆子
公共HttpEntity stringHttpEntity(){
返回新的HttpEntity(getHeaders());
}
}
然后,在适当的包中的/src/main/java下创建一个测试类,如下所示:

CallAPITest.java:

package com.app.apitool;

import com.app.apitool.config.BasicAuthSetup;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.client.RestOperations;

import static org.junit.Assert.assertNotNull;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = BasicAuthSetup.class)
public class CallAPITest {

    private static final String endpointURL = "";

    @Autowired
    private RestOperations rest;

    @Autowired
    private HttpEntity<String> stringHttpEntity;

    @Test
    public void pingAPi() {

        ResponseEntity<String> response = rest.exchange(endpointURL, HttpMethod.GET, stringHttpEntity, String.class);

        System.out.println(response.getBody());

        final String responseBody = response.getBody();

        assertNotNull(responseBody);
    }
}
package com.app.apitool;
导入com.app.apitool.config.BasicAuthSetup;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.http.HttpEntity;
导入org.springframework.http.HttpMethod;
导入org.springframework.http.ResponseEntity;
导入org.springframework.test.context.ContextConfiguration;
导入org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
导入org.springframework.web.client.rest操作;
导入静态org.junit.Assert.assertNotNull;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=BasicAuthSetup.class)
公共类调用测试{
私有静态最终字符串endpointURL=“”;
@自动连线
私人休息;
@自动连线
私有HttpEntity stringHttpEntity;
@试验
公共API(){
ResponseEntity response=rest.exchange(endpointURL、HttpMethod.GET、stringHttpEntity、String.class);
System.out.println(response.getBody());
最终字符串responseBody=response.getBody();
assertNotNull(responseBody);
}
}
以下是您在Maven pom.xml中对上述内容所需的依赖项(根据需要更改版本):


2.9.6
4.3.5.1发布
com.fasterxml.jackson.core
杰克逊核心
${jackson.version}
com.fasterxml.jackson.core
杰克逊数据绑定
${jackson.version}
org.springframework
spring上下文
${spring.version}
org.springframework
spring上下文支持
${spring.version}
org.springframework
弹簧试验
${spring.version}
org.springframework
弹簧网
${spring.version}
朱尼特
朱尼特
4.12
测试

这里缺少很多上下文。你是如何把这些联系起来的?Java配置?XML配置?你能给我看看吗?另外,显示整个类,包括包定义等@EricGreen我没有任何配置文件,因为这是一个非常简单的基本结构。我以前从未使用过spring框架。我在上面添加了我的主类。
RestOperations
是一个由实现的接口,您已经自动连接了一个
RestTemplateBuilder
,用于创建
RestTemplate
对象,那么为什么您认为可以自动连接
RestOperations
?使用生成器。这就是它的目的同样,还有一个带有本地创建实例的
restemplate
字段,那么为什么需要
RestOperations
?@user2607744为什么要连接
restemplatebuilder
?为什么您认为需要连接到
RestOperations
?为什么要直接创建一个
RestTemplate
?这三个动作似乎都是为了同一个目的。你一直在学习什么奇怪的教程?重新检查您的源材料,看看应该如何做。或者只需阅读文档,即Spring Boot参考指南,部分,其中显示您连接了一个
RestTemplateBuilder
,使用它来构建一个
RestTemplate
,然后使用它来执行REST调用。
<properties>
    <jackson.version>2.9.6</jackson.version>
    <spring.version>4.3.5.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>