【问题标题】:how to do post request with raw data via spring rest template如何通过spring rest模板使用原始数据发布请求
【发布时间】:2018-05-04 09:27:59
【问题描述】:

谁能告诉我如何使用原始数据参数发送 POST 请求,如下图所示

我尝试了以下代码,但它不起作用

HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON);
            JsonObject properties = new JsonObject();
            MultiValueMap<String, String> params = new LinkedMultiValueMap<>();         
            try {

                properties.addProperty("app_id", appId);
                properties.addProperty("identity","TestAPI");
                properties.addProperty("event", "TestCompleted");
                properties.addProperty("testType", t.getTestType());
                properties.addProperty("testName",t.getTestName());
                properties.addProperty("chapter","");
                properties.addProperty("module","");
                properties.addProperty("pattern",t.getTestPattern());
                HttpEntity<String> request = new HttpEntity<>(
                        properties.toString(), headers);
               // params.add("properties", properties.toString());
                 restTemplate.postForObject(url, request, String.class);

有人可以帮忙吗?

【问题讨论】:

  • 如果它的结构是静态的,你可以使用@request body
  • @poojapatil 怎么样?你能举个例子吗?
  • 创建一个 Dto,您将在其中包含上述字段,以发布使用 webclient,例如 (client.target(end url) .request(MediaType.APPLICATION_JSON).header(如果有任何标题) .post(Entity.entity(scheme, MediaType.APPLICATION_JSON));)

标签: java api spring-boot heap-analytics


【解决方案1】:

试试这个:

@RestController
public class SampleController { 
    @RequestMapping("/req")
    public String performReqest(){
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);        
        JsonObject properties = new JsonObject();
        properties.addProperty("no", "123");
        properties.addProperty("name", "stackoverflow");
        HttpEntity<String> request = new HttpEntity<>(properties.toString(), headers);
        RestTemplate restTemplate = new RestTemplate();
        String response = restTemplate.postForObject("http://localhost:4040/student", request, String.class);
        return "Response from Server is : "+response;       
    }

    @RequestMapping("/student")
    public String consumeStudent(@RequestBody Student student){
        System.out.println(student);
        return "Hello.."+student.name;
    }   
}

class Student{
    public int no;
    public String name; 
    public Map<String,String> properties;   
}

不要忘记移动 Student 类并将所有字段更改为 private 并使用 require getter 和 setter。 以上代码仅用于演示目的。

【讨论】:

    【解决方案2】:

    请试试这个:

    ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
    

    【讨论】:

      【解决方案3】:

      您是否尝试过使用 postmaster 并首先检查输出。如果它工作,那么你可以去邮寄或交换方法。交换退货并不要邮寄。

      【讨论】:

        【解决方案4】:

        试试这个:

        URI uri = new URI("something");
        Map<String, Object> params = new HashMap<>();
                params.put("app_id", "something");
                params.put("identity", something);
        
        HttpEntity<Map<String, String>> request = new HttpEntity(params , headers);
           
        ResponseEntity<String> response = restTemplate.postForEntity(uri, request, String.class);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-17
          • 1970-01-01
          • 2019-03-25
          • 1970-01-01
          • 1970-01-01
          • 2020-11-14
          • 2021-03-04
          相关资源
          最近更新 更多