bean++ 2025-04-22 08:36 采纳率: 40%
浏览 12

发送Post请求缺失请求体

RestTemplate 在非Spring环境下使用,发送Post请求缺失请求体


    public static void main(String[] args) throws JsonProcessingException {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        headers.setContentType(MediaType.APPLICATION_JSON);
        // 创建请求体对象
        Framework framework = new Framework();
        framework.setName("Servicecomb");
        framework.setVersion("");

        Service service = new Service();
        service.setAppId("test");
        service.setDescription("");
        service.setEnvironment("development");
        service.setServiceName("test");
        service.setVersion("0.0.1");
        service.setFramework(framework);
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(service);

        // 构建请求实体
        HttpEntity<String> entity = new HttpEntity<>(json, headers);

        // 发送POST请求
        ResponseEntity<String> response = restTemplate.postForEntity(
                "http://localhost:30103/api/v4/default/registry/microservices",
                entity,
                String.class
        );

        // 处理响应
        System.out.println(response.getBody());
    }


报错

Exception in thread "main" org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"errorCode":"400001","errorMessage":"Invalid parameter(s)","detail":"Request body is empty"}"
    at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:103)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:183)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:137)
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:932)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:881)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:781)
    at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:529)
    at com.cll.jtool.app.config.Test.main(Test.java:45)

依赖

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
   <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>

  • 写回答

2条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-04-22 09:48
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 问题在于在非Spring环境下使用RestTemplate发送Post请求时,请求体缺失。这可能是由于没有正确设置请求体相关的参数或者使用方式不当导致的。
    2. 解决方案
      - 首先,创建一个RestTemplate实例:
      java RestTemplate restTemplate = new RestTemplate();
      - 然后,构建请求体数据。假设请求体是一个JSON字符串,可以这样创建:
      java String requestBody = "{\"key\":\"value\"}";
      - 接下来,设置请求头。通常需要设置Content-Type为合适的值,比如application/json
      java HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON);
      - 最后,创建HttpEntity并发送请求:
      java HttpEntity<String> entity = new HttpEntity<>(requestBody, headers); ResponseEntity<String> response = restTemplate.postForEntity("your-url", entity, String.class);
      - 完整示例代码如下:
      ```java
      import org.springframework.http.HttpEntity;
      import org.springframework.http.HttpHeaders;
      import org.springframework.http.MediaType;
      import org.springframework.web.client.RestTemplate;

    public class Main {
    public static void main(String[] args) {
    RestTemplate restTemplate = new RestTemplate();
    String requestBody = “{"key":"value"}”;
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity entity = new HttpEntity<>(requestBody, headers);
    ResponseEntity response = restTemplate.postForEntity(“your-url”, entity, String.class);
    System.out.println(response.getBody());
    }
    }
    `` 3. **不同解决方案分析**: - **优点**:上述方法是一种较为标准和通用的方式来发送带有请求体的Post请求。清晰地展示了如何构建请求头、请求体并发送请求。 - **缺点**:代码相对比较繁琐,如果需要发送的请求体是复杂对象,还需要进行对象到JSON字符串的转换等额外操作。可以考虑使用一些JSON处理库来简化这个过程,比如Jackson或者Gson。 4. **总结**: - 要解决在非Spring环境下RestTemplate发送Post请求缺失请求体的问题,关键在于正确构建请求体、设置请求头,并使用HttpEntity`来封装请求信息发送给服务器。按照上述步骤和示例代码,可以实现完整的带请求体的Post请求发送。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月22日