【问题标题】:HTTP POST using JSON in Spring Rest在 Spring Rest 中使用 JSON 的 HTTP POST
【发布时间】:2016-03-06 20:19:05
【问题描述】:

我想使用 Spring RestTemplate 制作一个简单的 HTTP POST。 Wesb 服务接受 JSON 参数,例如:{"name":"mame","email":"email@gmail.com"}

   public static void main(String[] args) {

    final String uri = "url";
    RestTemplate restTemplate = new RestTemplate();
    // Add the Jackson message converter
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    // create request body
    String input = "{   \"name\": \"name\",   \"email\": \"email@gmail.com\" }";
    JsonObject request = new JsonObject();
    request.addProperty("model", input);

    // set headers
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Authorization", "Basic " + "xxxxxxxxxxxx");
    HttpEntity<String> entity = new HttpEntity<String>(request.toString(), headers);

    // send request and parse result
    ResponseEntity<String> response = restTemplate
            .exchange(uri, HttpMethod.POST, entity, String.class);

    System.out.println(response);
}

当我测试这段代码时,我得到了这个错误:

 Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 400 Bad Request

当我使用 Curl 调用 web 服务时,我得到了正确的结果:

 curl -X POST -H "Authorization: Basic xxxxxxxxxx" --header "Content-Type: application/json" --header "Accept: application/json" -d "{   \"name\": \"name\",   \"email\": \"email@gmail.com\" } " "url"

【问题讨论】:

  • 添加您尝试访问的 web 服务代码和正确执行的邮递员或 curl 表达式的屏幕截图...
  • 我无法访问网络服务。通过使用 curl 我可以使用以下命令调用 ws: curl -X POST -H "Authorization: Basic xxxxxxxxxx" --header "Content-Type: application/json" --header "Accept: application/json" -d "{ \ “姓名\”:\“姓名\”,\“电子邮件\”:\“email@gmail.com\”}““网址”

标签: spring web-services rest spring-mvc spring-rest


【解决方案1】:

尝试从代码中删除model,正如我在您的 curl 请求中看到的那样,您没有使用模型属性并且一切正常。试试这个:

 public static void main(String[] args) {

    final String uri = "url";
    RestTemplate restTemplate = new RestTemplate();
    // Add the Jackson message converter
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    // create request body
    String input = "{\"name\":\"name\",\"email\":\"email@gmail.com\"}";


    // set headers
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Authorization", "Basic " + "xxxxxxxxxxxx");
    HttpEntity<String> entity = new HttpEntity<String>(input, headers);

    // send request and parse result
    ResponseEntity<String> response = restTemplate
            .exchange(uri, HttpMethod.POST, entity, String.class);

    System.out.println(response);
}

【讨论】:

  • 消息转换器能否将Java对象转换为json字符串?假设输入是用户类型的对象。 User = new User("name", "email@gmail.com");
猜你喜欢
  • 1970-01-01
  • 2017-05-22
  • 2012-02-23
  • 2016-08-23
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多