2015-12-02 200 views
1

我想用Spring RestTemplate做一个简单的HTTP POST。 的WESB服务接受JSON的参数,例如:{"name":"mame","email":"[email protected]"}在Spring Rest中使用JSON的HTTP POST

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 protected]\" }"; 
    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 

当我打电话web服务与卷曲我有正确的结果:

curl -X POST -H "Authorization: Basic xxxxxxxxxx" --header "Content-Type: application/json" --header "Accept: application/json" -d "{ \"name\": \"name\", \"email\": \"[email protected]\" } " "url" 
+0

添加你要访问web服务代码和邮递员或正确执行卷曲表达的截图...... –

+0

I'haven't访问web服务。通过使用curl,我可以使用以下命令调用ws:curl -X POST -H“Authorization:Basic xxxxxxxxxx”--header“Content-Type:application/json”--header“Accept:application/json”-d“{\ “name \”:\“name \”,\“email \”:\“[email protected] \”} “”url“ –

回答

8

尝试从代码中删除model,因为我可以在您的卷发请求中看到您没有使用模型属性,并且一切正常。试试这个:

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 protected]\"}"; 


    // 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); 
} 
+0

这是工作非常感谢。 –

+1

消息转换器可以将Java对象转换为json字符串吗?假设输入是一个类型为User的ojbect。用户=新用户(“姓名”,“[email protected]”); – fall