【问题标题】:"no Content-Type found" : Issue when using RESTTemplate to POST to HTTP endpoint“未找到 Content-Type”:使用 RESTTemplate 发布到 HTTP 端点时出现问题
【发布时间】:2017-11-02 09:42:35
【问题描述】:

我正在尝试使用 RESTTemplate 将 XML 正文发布到 HTTP 端点,但是抛出了以下异常 - “org.springframework.web.client.RestClientException:无法提取响应:找不到 Content-Type”。

我已检查并且 XML 文件已成功发布到端点,但是我无法解决此异常 - 显然我做错了什么。我想我可能需要使用 HTTP Mapping Converter ,但我不知道如何实现。

def post(String jenkinsURL, String username, String apiCredentials, String jobName) {

    RestTemplate rest = new RestTemplate()
    String url = "http://$jenkinsURL//createItem?name=$jobName"
    def jenkinsConfigPath = "src/main/resources/JenkinsConfig.xml"
    def encoding = Base64.getEncoder().encodeToString((username + ":" + apiCredentials).getBytes())
    String xmlConfigFile = jenkinsConfigReader.read(jenkinsConfigPath)

    HttpHeaders headers = new HttpHeaders()
    headers.setContentType(MediaType.APPLICATION_XML)
    headers.add("Authorization", "Basic " + encoding)

    HttpEntity<String> entity = new HttpEntity<String>(xmlConfigFile, headers)

    rest.exchange(url, HttpMethod.POST, entity, String.class)

【问题讨论】:

  • 我想通了。在使用 Gradle 进行编译时,我已将 org.springframework 的版本更改为“编译组:'org.springframework',名称:'spring-web',版本:'4.3.7.RELEASE'”。现在我对相同的语法没有任何问题。不确定这是否是最好的方法!

标签: http resttemplate httpentity


【解决方案1】:

在 Java 中我写了一个这样的过滤器:

@Provider
public class CorsFilter implements ContainerResponseFilter
{
    @Override
    public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext)
            throws IOException
    {
        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        responseContext.getHeaders().add(
                "Access-Control-Allow-Headers",
                "origin, content-type, accept, authorization, X-Requested-With");
        responseContext.getHeaders().add("Access-Control-Allow-Credentials", "false");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        if(requestContext.getMethod().equals("OPTIONS"))
        {
            responseContext.setStatus(200);
        }
    }

}

提供者是一种扩展和定制 JAX-RS 运行时的简单方法。也许这也是您解决问题的一种方式。

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 2019-06-08
    • 2016-06-14
    • 2018-05-02
    • 2015-10-20
    • 1970-01-01
    • 2017-01-10
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多