2014-10-07 212 views
0

我開發了一個jax-rs項目並調用REST服務來將數據添加到數據庫。當我發送一個POST請求來添加一些數據時,它會給出200個狀態碼,將數據添加到數據庫中,另外它還會給出500狀態,說明內部服務器錯誤。HTTP 500錯誤失敗,200狀態代碼

以下是我的jax-rs代碼。

@POST 
@Path("https://stackoverflow.com/users/add/") 
@Produces("text/plain") 
public Response addUser(
     @QueryParam("userId") String userId, 
     @QueryParam("userName") String userName, 
     @QueryParam("userRole") String userRole, 
     @QueryParam("email") String email, 
     @QueryParam("password") String password, 
     @QueryParam("phone") String phone) { 

    System.out.println("----invoking addUser"); 

    try{ 
     httpClient = new DefaultHttpClient(); 
     HttpPost postRequest = new HttpPost("http://appserver.dev.cloud.wso2.com/services/t/madusanka/projecttrackerdb-default-SNAPSHOT/addUser"); 
     postRequest.addHeader("accept", "application/xml"); 

     List nameValuePairs = new ArrayList(); 
     nameValuePairs.add(new BasicNameValuePair("userId",userId)); 
     nameValuePairs.add(new BasicNameValuePair("userName",userName)); 
     nameValuePairs.add(new BasicNameValuePair("userRole",userRole)); 
     nameValuePairs.add(new BasicNameValuePair("email",email)); 
     nameValuePairs.add(new BasicNameValuePair("password",password)); 
     nameValuePairs.add(new BasicNameValuePair("phone",phone)); 
     postRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 


     HttpResponse response = httpClient.execute(postRequest); 
     int statusCode = response.getStatusLine().getStatusCode(); 
     if (statusCode != 201) 
     { 
      throw new RuntimeException("Failed with HTTP error code : " + statusCode); 
     } 
    }catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally{ 
     //Important: Close the connect 
     httpClient.getConnectionManager().shutdown(); 
    } 
    return Response.ok().build(); 
} 

當我從REST客戶端調用它時,我得到以下響應。

Status : 500 Internal Server Error 
org.apache.cxf.interceptor.Fault: Failed with HTTP error code : 200 
org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) 
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) 
org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:194) 
org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:100) 
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:57) 
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:93) 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) 
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) 
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223) 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203) 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) 
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:159) 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286) 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:755) 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:606) 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274) 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271) 
java.security.AccessController.doPrivileged(Native Method) 
javax.security.auth.Subject.doAsPrivileged(Subject.java:536) 
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306) 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:166) 

這可能是什麼原因造成的?

回答

1

您使用201檢查狀態。您可以將其更改爲200

if (statusCode != 200) 
    { 
     throw new RuntimeException("Failed with HTTP error code : " + statusCode); 
    } 

這是更好地使用響了起來,而不是隻是一個數字,以檢查HTTP失敗:

if (statusCode > 399) 
    { 
     throw new RuntimeException("Failed with HTTP error code : " + statusCode); 
    } 
+0

感謝了很多。有用 :) – Dini88 2014-10-07 07:52:02

相關問題