2016-07-19 9 views
0

Ich versuche derzeit, Antwort JSON zu erhalten, indem Sie eine REST-Anfrage, aber Problem ist "Wenn Status 200: OK, dann bekomme ich JSON Antwort, aber wenn Status 403: Verboten dann kann ich nicht JSON-Antwort erhalten ". Im Anschluss ist mein Arbeits Code auf 200: OK, aber nicht auf einer anderen Statusmeldung:POST Anfrage 403 verboten wird nicht unterstützt

Schnittstelle:

@Rest(rootUrl = "http://something.com", converters = {FormHttpMessageConverter.class, GsonHttpMessageConverter.class}) 
public interface RestClient { 
    @Post("/isec/api/user/login") 
    JsonObject LoginIt(@Field String email, @Field String password, @Field String type); 
} 

Verbrauch:

JsonObject p = restClient.LoginIt(emailText.getText().toString(),passwordText.getText().toString(),spinner1.getSelectedItem().toString().toUpperCase()); 
      GsonStr = new Gson().toJson(p); 
      ShowResults(p); 

Log:

E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1 
        Process: com.jutt.isec, PID: 3463 
        org.springframework.web.client.HttpClientErrorException: 403 Forbidden 
         at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88) 
         at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:585) 
         at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:541) 
         at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:499) 
         at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:447) 
         at com.jutt.isec.RestClient_.LoginIt(RestClient_.java:41) 
         at com.jutt.isec.MainActivity.doLogin(MainActivity.java:130) 
         at com.jutt.isec.MainActivity_.access$201(MainActivity_.java:31) 
         at com.jutt.isec.MainActivity_$5.execute(MainActivity_.java:159) 
         at org.androidannotations.api.BackgroundExecutor$Task.run(BackgroundExecutor.java:405) 
         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
         at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
         at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 
         at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
         at java.lang.Thread.run(Thread.java:818) 

Irgendwelche Vorschläge oder Lösungen? Vielen Dank im Voraus

+0

ändern Wenn Sie eine 403 verboten bekommen, dann erhalten Sie keine JSON-Antwort zu beginnen. Also versuch es nicht als json. – greenapps

+0

dann wie soll ich das in Ausnahme oder etwas behandeln, sonst stürzt meine Anwendung sowieso –

+0

Setzen Sie den Aufruf in einen try catch-Block. Dann wird Ihre Anwendung nicht abstürzen. Wenn Ihre Anwendung abstürzt, finden Sie die Ursache im LogCat. Sie wissen also, welche Ausnahme ausgelöst wird. Sagen Sie uns, welche Ausnahme Sie haben. – greenapps

Antwort

0

Sie erhalten kein JSON, aber Sie können den Status überprüfen, den Sie erhalten. sollten Sie einen RestErrorHandler verwenden, erwähnt als here

Ein Beispiel für meinen Code

@EBean 
public class RestErrorHandler implements RestErrorHandler { 

    @RootContext 
    Context context; 

    @Bean 
    MyErrorHandler mErrorHandler; 

    @Bean 
    OttoBus ottoBus; 

    @Override 
    public void onRestClientExceptionThrown(NestedRuntimeException e) { 

     if (e instanceof HttpStatusCodeException) { 
      HttpStatusCodeException exception = (HttpStatusCodeException) e; 
      if (exception.getStatusCode() == HttpStatus.UNAUTHORIZED) { 
     mErrorHandler.handleGenericError(context.getString(R.string.auth_error)); 
      } else { 
       mErrorHandler.handleGenericError(context.getString(R.string.generic_error)); 
      } 
     } else if (e instanceof RestClientException) { 
      // do something else 
     } else { 
      mErrorHandler.handleGenericError(context.getString(R.string.root_error)); 
      Log.e("errorw", e.getMessage()); 
     } 
    } 
} 

Ihr RestClient muss RestClientErrorHandling wie diese

public interface RestClient extends RestClientErrorHandling 

Dann erweitern, in dem Sie Ihr RestClient instanziiert, sollten Sie Stellen Sie Ihren RestErrorHandler wie folgt ein:

@AfterInject 
public void init() { 
    mService.setRestErrorHandler(mErrorHandler); 
} 

Sie können HttpStatus.UNAUTHORIZED mit HttpStatus.FORBIDDEN