在Spring Rest中使用JSON的HTTP POST

you*_*ene 3 rest spring web-services spring-mvc spring-rest

我想使用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);
}
Run Code Online (Sandbox Code Playgroud)

当我测试此代码时,我收到此错误:

 Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 400 Bad Request
Run Code Online (Sandbox Code Playgroud)

当我用Curl调用webservice时,我得到了正确的结果:

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

Nik*_*sev 12

尝试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);
}
Run Code Online (Sandbox Code Playgroud)

  • 消息转换器可以将Java对象转换为json字符串吗?假设输入是User类型的ojbect.User = new User("name","email@gmail.com"); (2认同)