当前位置: 首页 > 知识库问答 >
问题:

如何添加MediaType。应用程序将JSON添加到标头,并将标头添加到restTemplate,然后执行getForObject

宋耀
2023-03-14

我有以下代码:

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class Application {

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

    }

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {


        RestTemplate restTemplate =  builder.rootUri("http://login.xxx.com/").basicAuthorization("user", "pass").build();
        return restTemplate;
    }

    @Bean
    public CommandLineRunner run(RestTemplate restTemplate) throws Exception {



        return args -> {
             restTemplate.getForObject(
                    "http://login.xxx.com/ws/YY/{id}", YY.class,
                    "123");

        };

    }

}

但我得到了这个错误:导致:org.springframework.web.client.RestClientExcture:无法提取响应:没有合适的HttpMessageConzer找到响应类型[类com.xxx.test.YY]和内容类型[应用程序/xml; charset=ISO-8859-1]

如何添加MediaType。应用程序将JSON添加到标头,并将标头添加到restTemplate,然后执行getForObject?

共有1个答案

隗瑞
2023-03-14

当使用任何get方法时,您不需要添加接受标头,RestTem板会自动添加。如果您查看RestTem板的构造函数,您可以看到它会自动检查类路径并添加公共消息转换器。因此,您可能需要检查您的类路径(或进入构造函数以查看它自动检测哪些转换器。

如果您需要添加自定义标头,如承载身份验证,您可以始终使用Exchange方法完全按照您的意愿构建请求。下面是一个应该工作的例子,我已经明确地添加了杰克逊消息转换器,所以如果它不在你的类路径中,你应该会得到一个编译错误。

import java.net.URI;
import java.util.Map;

import com.google.common.collect.Lists;
import org.springframework.http.*;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

public class Main {

    public static void main(String[] args) throws Exception {

        RestTemplate template = new RestTemplate();
        template.setMessageConverters(Lists.newArrayList(new MappingJackson2HttpMessageConverter()));
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Lists.newArrayList(MediaType.APPLICATION_JSON));
        ResponseEntity<Map> forEntity = template.exchange(new RequestEntity<>(null, headers, HttpMethod.GET, new URI("https://docs.tradable.com/v1/accounts")), Map.class);
        System.out.println("forEntity.getBody() = " + forEntity.getBody());
    }
}
 类似资料:
  • 问题内容: 我有一个Flask Web应用程序,它使用render_template如下,我需要在响应中添加一个Content-Security-Policy作为附加的HTTP响应标头。我尝试了以下方法,但都失败了,并给了我500。 1。 2。 这里有什么问题? 在终端上,以localhost:3001的身份访问Web应用程序时,我看到以下内容 127.0.0.1–[2015年4月6日01:45:

  • 问题内容: 我编写了一个Python脚本,用于合并两个csv文件,现在我想在最终的csv中添加标头。我尝试按照此处报告的建议进行操作,但出现以下错误:。解决此问题的最有效方法是什么? 这是我正在使用的代码: 问题答案: 该班预计 字典 的每一行。如果您只想编写一个初始标头,请使用常规并在标头的简单行中传递: 另一种方法是在跨数据复制时生成字典:

  • 问题内容: 我正在尝试访问网站,但无法将收集到的“ Cookie”添加到传出的POST请求标头中。我已经能够验证它们是否存在于CookieManager中。 HtmlUnit的任何替代方法也将不胜感激。 问题答案: 我发现可以使用WebClient中的setadditionalHeader()添加标题。

  • 问题内容: 我有一个角度应用程序,需要将其重定向到外部非角度html页面,所以我认为我可以使用将该角度应用程序重定向到我的外部站点。这实际上工作正常,但是,我有一个nodejs / express后端,在提供任何内容(甚至静态内容)之前检查auth令牌。 这要求在http请求的标头中发送身份验证令牌。现在的问题是: 可以/如何在发送前更改更改后的请求中添加身份验证令牌? 问题答案: 使用浏览器时,

  • 问题内容: 我有angularjs应用程序,用户在其中输入保存到数据库的数据,然后在服务器端将其编译为pdf文件。所有访问都需要适当的身份验证标头。填充所需的数据后,用户可以按按钮保存数据,然后检索pdf文件。理想情况下,我在我的angularjs应用中调用)。这可以正常工作并在另一个窗口中打开,但是如何向此请求添加身份验证标头?以我的理解,我无法下载pdf并使用ajax进行打印,因此我缺少此身份

  • 我一直在尝试应用敏感度标签并使用MIP和MailMessage发送电子邮件。 基于MipSdk-DotNet-Polury-Quickstart项目,我添加了选项元数据和,并将内容格式设置为。 计算操作后,我获得了带有mips_label键和模板 ID 的元数据。使用消息将mips_label添加到邮件。 将它们添加到电子邮件中,但收到标签时不会应用。 可以通过outlook客户端添加标签。我的方