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

使用RestTemplate将请求发送到RestAPI,给我一个空响应

利思源
2023-03-14

我想使用RESTTemplate将POST请求发送到RestAPI。当我执行下面的代码时,它给出了null响应。但是,我得到了http状态代码200 OK。我已经适当地添加了响应模型,所以模型没有问题。甚至,当我将响应类型更改为String时,它也不给我响应。有什么建议吗?

MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
               headers.add("Authorization", "Basic " + "c21sOnBhc3N3b3Jk");
               headers.add("Content-Type", "application/json");

               RestTemplate restTemplate = new RestTemplate();
               restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

               HttpEntity<NikeIdgenReq> request = new HttpEntity<NikeIdgenReq>(nikeIdgenReq, headers);

               String resp = restTemplate.postForObject(url, request, String.class);

共有1个答案

闻人仲渊
2023-03-14

在Googleing之后,我找到了一个解决方案,使响应模型类可序列化,并添加JsonProperty注释,如下代码所示

public class NikeIdgenRes implements Serializable{

    @JsonProperty("bundleID")
    private String bundleID;
    @JsonProperty("ids")
    private List<Id> ids = null;
    @JsonProperty("gtin")
    private String gtin;
    @JsonProperty("quantity")
    private Integer quantity;
    @JsonProperty("types")
    private List<String> types = null;
    @JsonProperty("meta")
    private Meta meta;

    // getters & setters
    }

public NikeIdgenRes addNikeIdgen(NikeIdgenRq nikeIdgenRq) { 

            String url = "https://idgen-dev.connected-product.edflab.nikecloud.net/sensors/id_bundle/v1";

            HttpEntity<NikeIdgenRq> httpEntity = new HttpEntity<>(nikeIdgenRq, getHttpHeaders());
            ResponseEntity<NikeIdgenRes> result = restTemplateBuilder.build().postForEntity(url, httpEntity, NikeIdgenRes.class);

            NikeIdgenRes nikeIdgenRes = new NikeIdgenRes();
            nikeIdgenRes.setBundleID(result.getBody().getBundleID());
            nikeIdgenRes.setIds(result.getBody().getIds());
            nikeIdgenRes.setGtin(result.getBody().getGtin());
            nikeIdgenRes.setQuantity(result.getBody().getQuantity());
            nikeIdgenRes.setTypes(result.getBody().getTypes());
            nikeIdgenRes.setMeta(result.getBody().getMeta());

           return nikeIdgenRes;
       }
 类似资料:
  • 问题内容: 我正在开发一个React应用,该应用需要从elsaticsearch获取数据。在前端,实际上我正在尝试使用axios来执行请求: 我想获取带有某些ID的特定文档。上面的查询实际上在kibana内部有效。但是,以上查询返回my-type内的所有文档,我在这里做错了什么? 问题答案: 我认为以下应该可行。虽然爱可信自述说,是专门只为,,和请求,我没有看到在强制执行此代码的任何,和简化的测试

  • 问题内容: 是否可以使用发送 请求,例如? 我想将以下xml发送到url 我是否还想在每个请求上动态添加自定义http标头(!)。 我怎样才能在春季实现这一目标? 问题答案: 首先,定义标题,如下所示: 您可以使用此方法设置任何标题。对于众所周知的标题,您可以使用预定义的方法。例如,为了设置标题: 然后定义一个或准备您的请求对象: 如果您可以某种方式访问​​该字符串,则可以使用。否则,您可以定义一

  • 我不熟悉RESTAPI和Spring Boot。我一直在尝试使用存储员工数据的STS和MySQL创建RESTAPI。 一切似乎都很好,但是当我在Postman中发布数据时,空的行存储在MySQL和body中。 //员工控制器类 //员工存储库类 //员工服务类 //员工服务Impl

  • 我有一个Web服务,它使用Spring Rest Controller(使用Netty而不是Apache Tomcat)处理GET/POST/PUT HTTP请求。我希望过滤我服务中的所有请求,当请求配置了特定的标头时,我希望将此特定请求发送到一个完全不同的URL,同时将响应返回到发送原始请求的相同实体。 这是我的代码: 在这个实现中,请求只是传递给我的普通rest控制器,而不会到达其他服务。我错

  • 我正在使用RestTemboard使用Web服务,我的POST请求如下。 我试着打印我的requestBodyJsonObject并将其放入rest客户机,它工作正常,所以请求主体没有问题。但在这里,我并没有得到预期的结果,只是在没有rest客户端的请求主体的情况下发送post请求时得到了结果。 所以我在这里一无所知。非常感谢您的帮助。

  • 我正在RestTemplate中使用exchange for GET方法。但是在exchange方法中传递requestEntity时,我得到了400个错误的请求。下面是我正在使用的代码。 生成URL: 我尝试从postman访问producer URL,其标题为Content-Type:Application/JSON,正文为{“firstName”:“a”,“lastName”:“b”,“da