3

Web サービスに接続する Android アプリケーションを開発しています。Web サービスから、次のエラーが表示されます。

POST request for "xxx" resulted in 422 (Unprocessable Entity); invoking error handler

私は Android 用の SpringFramework Rest Client を使用しており、次のコードで Web サービスに接続しています。

public static User sendUserPersonalData(User userProfileData)
{
    try
    {
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
        HttpEntity<User> requestEntity = new HttpEntity<User>(userProfileData, requestHeaders);

        GsonHttpMessageConverter messageConverter = new GsonHttpMessageConverter();
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
        messageConverters.add(messageConverter);

        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        requestFactory.setReadTimeout(readTimeout);

        RestTemplate restTemplate = new RestTemplate(requestFactory);
        restTemplate.setMessageConverters(messageConverters);

        String url = URL_BASE_WEB + USER_PERSONAL_DATA_CALL;
        ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, User.class);

        return responseEntity.getBody();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return null;
}

ただし、Web サービスは次のような JSON 文字列も返します。

{
    "email": [
        "is invalid"
    ],
    "birthday": [
        "is invalid"
    ],
    "startday": [
        "is invalid"
    ],
    "sex_preference": [
        "can't be blank"
    ],
    "password": [
        "is too long (maximum is 4 characters)"
    ]
}

例外が発生した場合でも、どうすれば取得できますか?

4

2 に答える 2

2

RestClientException次のようにキャッチする必要があります。

  try{
     ....
     restTemplate.exchange(...);
  }catch(RestClientException e){
     //process exception
     if(e instanceof HttpStatusCodeException){
         String errorResponse=((HttpStatusCodeException)e).getResponseBodyAsString();
         //now you have the response, construct json from it, and extract the errors
     }

  }

RestTemplate、のjavadocを見てくださいRestClientException

于 2013-06-27T08:49:07.253 に答える