복붙노트

[SPRING] JSON에서 RestTemplate을 통한 POST 요청

SPRING

JSON에서 RestTemplate을 통한 POST 요청

문제를 해결하는 방법을 찾지 못했기 때문에 도움을 요청하고 싶습니다. JSON에서 RestTemplate 객체를 사용하여 POST 요청을 보낼 수 없습니다.

내가 갈 때마다 :

이런 식으로 RestTemplate을 사용합니다.

...
restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> list = new ArrayList<HttpMessageConverter<?>>();
list.add(new MappingJacksonHttpMessageConverter());
restTemplate.setMessageConverters(list);
...
Payment payment= new Payment("Aa4bhs");
Payment res = restTemplate.postForObject("http://localhost:8080/aurest/rest/payment", payment, Payment.class);

내 잘못은 뭐니?

해결법

  1. ==============================

    1.이 기술은 나를 위해 일했습니다.

    이 기술은 나를 위해 일했습니다.

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    
    HttpEntity<String> entity = new HttpEntity<String>(requestJson, headers);
    ResponseEntity<String> response = restTemplate.put(url, entity);
    

    이게 도움이 되길 바란다

  2. ==============================

    2.REST 엔드 포인트를 디버깅 할 때이 문제점을 보았다. 다음은 Spring의 RestTemplate 클래스를 사용하여 내가 사용한 POST 요청을 만드는 기본 예제이다. 작업 버전을 얻으려면 다른 장소에서 코드를 함께 만드는 데 꽤 오랜 시간이 걸렸습니다.

    REST 엔드 포인트를 디버깅 할 때이 문제점을 보았다. 다음은 Spring의 RestTemplate 클래스를 사용하여 내가 사용한 POST 요청을 만드는 기본 예제이다. 작업 버전을 얻으려면 다른 장소에서 코드를 함께 만드는 데 꽤 오랜 시간이 걸렸습니다.

    RestTemplate restTemplate = new RestTemplate();
    
    String url = "endpoint url";
    String requestJson = "{\"queriedQuestion\":\"Is there pain in your hand?\"}";
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    
    HttpEntity<String> entity = new HttpEntity<String>(requestJson,headers);
    String answer = restTemplate.postForObject(url, entity, String.class);
    System.out.println(answer);
    

    내 휴식 끝점을 사용하는 특정 JSON 파서는 필드 이름 주위에 필요한 큰 따옴표를 사용하므로 내 requestJson String에서 큰 따옴표를 이스케이프 처리했습니다.

  3. ==============================

    3.나는 다음과 같이 JSONObjects로 나머지 템플릿을 사용 해왔다.

    나는 다음과 같이 JSONObjects로 나머지 템플릿을 사용 해왔다.

    // create request body
    JSONObject request = new JSONObject();
    request.put("username", name);
    request.put("password", password);
    
    // set headers
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<String> entity = new HttpEntity<String>(request.toString(), headers);
    
    // send request and parse result
    ResponseEntity<String> loginResponse = restTemplate
      .exchange(urlString, HttpMethod.POST, entity, String.class);
    if (loginResponse.getStatusCode() == HttpStatus.OK) {
      JSONObject userJson = new JSONObject(loginResponse.getBody());
    } else if (loginResponse.getStatusCode() == HttpStatus.UNAUTHORIZED) {
      // nono... bad credentials
    }
    
  4. ==============================

    4.여기에 지정된대로 MappingJacksonHttpMessageConverter에 대한 messageConverter를 추가해야합니다.

    여기에 지정된대로 MappingJacksonHttpMessageConverter에 대한 messageConverter를 추가해야합니다.

  5. ==============================

    5.Spring 3.0을 사용하고 있다면 org.springframework.web.client.HttpClientErrorException : 415 Unsupported Media Type 예외를 피하는 쉬운 방법은 classpath에 jackson jar 파일을 포함시키고 mvc : annotation-driven config 요소를 사용하는 것이다. 여기에 지정된대로.

    Spring 3.0을 사용하고 있다면 org.springframework.web.client.HttpClientErrorException : 415 Unsupported Media Type 예외를 피하는 쉬운 방법은 classpath에 jackson jar 파일을 포함시키고 mvc : annotation-driven config 요소를 사용하는 것이다. 여기에 지정된대로.

    mvc-ajax 앱이 MappingJacksonHttpMessageConverter에 대한 특별한 설정없이 작동하는 이유를 알아 내려고 노력했습니다. 위에 링크 된 기사를 읽으 셨다면 :

  6. ==============================

    6."415 Unsupported Media Type"오류는 서버가 POST 요청을 수락하지 않는다는 것을 알려줍니다. 귀하의 요청은 절대적으로 훌륭합니다. 잘못 구성된 서버입니다.

    "415 Unsupported Media Type"오류는 서버가 POST 요청을 수락하지 않는다는 것을 알려줍니다. 귀하의 요청은 절대적으로 훌륭합니다. 잘못 구성된 서버입니다.

    MappingJacksonHttpMessageConverter는 request content-type 헤더를 application / json으로 자동 설정합니다. 내 생각에 서버가이를 거부하고 있습니다. 당신은 서버 설정에 대해 아무 것도 말하지 않았으므로 그 점에 대해 정말로 조언 할 수는 없습니다.

  7. ==============================

    7.나는 이렇게하고있어.

    나는 이렇게하고있어.

    HttpHeaders headers = createHttpHeaders(map);
    public HttpHeaders createHttpHeaders(Map<String, String> map)
    {   
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        for (Entry<String, String> entry : map.entrySet()) {
            headers.add(entry.getKey(),entry.getValue());
        }
        return headers;
    }
    

    // 여기에 헤더를 전달하십시오.

     String requestJson = "{ // Construct your JSON here }";
    logger.info("Request JSON ="+requestJson);
    HttpEntity<String> entity = new HttpEntity<String>(requestJson, headers);
    ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
    logger.info("Result - status ("+ response.getStatusCode() + ") has body: " + response.hasBody());
    logger.info("Response ="+response.getBody());
    

    희망이 도움이

  8. ==============================

    8.이 문제가 발생하고 클라이언트의 Spring RestTemplate과 서버의 Spring Web를 사용하고 있습니다. 두 API 모두 오류보고가 매우 부족하여 개발하기가 매우 어렵습니다.

    이 문제가 발생하고 클라이언트의 Spring RestTemplate과 서버의 Spring Web를 사용하고 있습니다. 두 API 모두 오류보고가 매우 부족하여 개발하기가 매우 어렵습니다.

    여러 시간 동안 실험을하다 보니 예상되는 List 대신 POST 본문에 null 참조가 전달되어 문제가 발생한다는 것을 알았습니다. 나는 RestTemplate이 null 객체로부터 content-type을 결정할 수는 없지만 그것에 대해 불평하지 않는다고 생각한다. 올바른 헤더를 추가 한 후 서비스 메서드를 시작하기 전에 Spring에서 다른 서버 측 예외를 받기 시작했습니다.

    해결 방법은 null 대신 클라이언트에서 빈 List를 전달하는 것이 었습니다. 디폴트의 ​​content-type가 null 이외의 객체로 사용되기 때문에, 헤더는 필요 없습니다.

  9. ==============================

    9.이 코드는 나를 위해 작동합니다.

    이 코드는 나를 위해 작동합니다.

    RestTemplate restTemplate = new RestTemplate();
    Payment payment = new Payment("Aa4bhs");
    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
    map.add("payment", payment);
    HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(map, headerObject);
    
    Payment res = restTemplate.postForObject(url, httpEntity, Payment.class);
    
  10. ==============================

    10.나를 위해이 설정으로 오류가 발생했습니다 :

    나를 위해이 설정으로 오류가 발생했습니다 :

    AndroidAnnotations 봄 안드로이드 RestTemplate 모듈 그리고 ...

    GsonHttpMessageConverter

    안드로이드 어노테이션에는 매개 변수없이 POST 요청을 생성하기 위해 변환 된 문제가 있습니다. 간단히 매개 변수 new Object ()가 나를 위해 그것을 해결했습니다.

  11. from https://stackoverflow.com/questions/4075991/post-request-via-resttemplate-in-json by cc-by-sa and MIT license