java - HTTP 500 错误失败,状态代码为 200

标签 java rest wso2 jax-rs

我开发了一个 jax-rs 项目并调用 REST 服务将数据添加到数据库。当我发送 POST 请求以添加一些数据时,它会给出 200 状态代码,将数据添加到数据库中,此外它还会给出 500 状态,表示内部服务器错误。

下面是我的 jax-rs 代码。

@POST
@Path("/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)

这可能是什么原因?

最佳答案

您使用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);
    }

关于java - HTTP 500 错误失败,状态代码为 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26229869/

相关文章:

Java:为什么我需要初始化一个原始局部变量?

java - 通过 processbuilder 运行脚本

java - Jersey 客户端抛出 javax.ws.rs.ProcessingException : java.net.ConnectException : failed to connect to/127. 0.0.1(端口 8080)

java - WSO2 CEP 序列和外部时间

wso2 - 无法使用 WSO2 ESB 控制台浏览基于 ActiveMQ 的消息存储中的消息

java - 如何使用公共(public)进度更新到多用户环境?

java - 什么是NullPointerException,我该如何解决?

javascript - 出现错误 415 - 获取 api 中不支持的媒体类型

java - Jersey 2 - 带有 header 示例的简单客户端获取

web-services - WSO2 Api Manager 自定义错误消息