有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

爪哇邮政http://localhost:8080/server2_0_war_exploded/user返回500内部服务器错误的响应状态

你好,我在尝试创建用户时遇到了这个错误,希望有人能帮助我。其他功能就像一个符咒,但不是这个。 有一个客户端和一个服务器

提前谢谢你:D

客户端控制器中的createUser()

public void createUser() {
    JsonObject data = new JsonObject();

    Scanner input = new Scanner(System.in);

    System.out.println("Input your firstname");
    data.addProperty("firstname", input.nextLine());

    System.out.println("Input your Lastname");
    data.addProperty("lastname", input.nextLine());

    System.out.println("Input your Email");
    data.addProperty("email", input.nextLine());

    System.out.println("Input your Username");
    data.addProperty("username", input.nextLine());

    System.out.println("Input your Password");
    data.addProperty("password", input.nextLine());

    data.addProperty("usertype", "0");

    Connection.postUser(data);


}

客户端连接类中的positionr()

public static String postUser(JsonObject data) {
    ClientResponse clientResponse = HttpRequests.post("/user/", Crypter.encryptDecryptXOR(new Gson().toJson(data)));

    String response = null;

    if (clientResponse == null) {

        System.out.println("Error on SDK");
    } else {
        response = clientResponse.getEntity(String.class);
        if (clientResponse.getStatus() == 200) {
            System.out.println(response);
        } else
            System.out.println("error");
    }
    clientResponse.close();
    return response;

}

客户端HttpRequests类中的Post方法

public static ClientResponse post(String path, String data) {
    ClientResponse clientResponse = null;

    try {

        WebResource webResource = client
                .resource("http://localhost:8080/server2_0_war_exploded")
                .path(path);

        clientResponse = webResource.accept("application/json").post(ClientResponse.class, data);
    }
    catch
            (UniformInterfaceException | ClientHandlerException e) {
        e.printStackTrace();
    }
    return clientResponse;
}

后置方法服务器终结点

@POST
@Produces("application/json")


public Response create(String data) throws Exception {
    String s = new Gson().fromJson(data,String.class);
    String decrypt = Crypter.encryptDecryptXOR(s);
    if (controller.addUser(decrypt)) {
        return Response
                .status(200)
                .entity("{\"message\":\"Success! User added\"}")
                .build();

    }
    else return Response.status(400).entity("{\"message\":\"failed\"}").build();
}

服务器DbConnection类中的已准备语句

public boolean addUser(User u) throws Exception {

    PreparedStatement addUserStatement =
            conn.prepareStatement("INSERT INTO Users (First_Name, Last_Name, Username, Email, Password, Usertype) VALUES (?, ?, ?, ?, ?, ?)");

    try {
        addUserStatement.setString(1, u.getFirstName());
        addUserStatement.setString(2, u.getLastName());
        addUserStatement.setString(3, u.getUsername());
        addUserStatement.setString(4, u.getEmail());
        addUserStatement.setString(5, u.getPassword());
        addUserStatement.setBoolean(6, u.getUserType());

        addUserStatement.execute();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return true;
}

输入到Api

欢迎来到主菜单

您有以下选择

登录

创建用户

二,

输入你的名字

克里斯托弗

输入您的姓氏

帕尔斯加德

输入您的电子邮件

Chris@chris.com

输入您的用户名

伙伴

输入您的密码

1234

错误

尝试调试客户端连接类第132行时出错

        if (clientResponse.getStatus() == 200) { clientResponse: "POST http://localhost:8080/server2_0_war_exploded/user returned a response status of 500 Internal Server Error"

以及服务器错误日志

[2016-12-07T17:28:05.007+0100][glassfish 4.1][警告][[javax.enterprise.web][tid:_ThreadID=27 _ThreadName=http-listener-1(3)][timeMillis:1481128085007][levelValue:900][[ StandardWrapperValve[MyApplication]:Servlet。servlet MyApplication的服务()引发异常 通用域名格式。谷歌。格森。流动格式错误的JSONException:使用JsonReader。setLenient(true)在第1行第5列路径接受格式错误的JSON$ 在com。谷歌。格森。流动JsonReader。syntaxError(JsonReader.java:1559) 在com。谷歌。格森。流动JsonReader。checkLenient(JsonReader.java:1401) 在com。谷歌。格森。流动JsonReader。doPeek(JsonReader.java:542) 在com。谷歌。格森。流动JsonReader。peek(JsonReader.java:425) 在com。谷歌。格森。格森。assertFullConsumption(Gson.java:859) 在com。谷歌。格森。格森。fromJson(Gson.java:853) 在com。谷歌。格森。格森。fromJson(Gson.java:801) 在com。谷歌。格森。格森。fromJson(Gson.java:773) 在端点处。用户发送点。创建(UsersEndpoint.java:113) 在太阳下。反映NativeMethodAccessorImpl。invoke0(本机方法) 在太阳下。反映NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:62) 在太阳下。反映DelegatingMethodAccessorImpl。调用(DelegatingMethodAccessorImpl.java:43) 在爪哇。朗。反思。方法调用(Method.java:498) 在org。玻璃鱼。运动衫服务器模型内部的ResourceMethodInvocationHandlerFactory$1。调用(ResourceMethodInvocationHandlerFactory.java:81) 在org。玻璃鱼。运动衫服务器模型内部的AbstractJavaResourceMethodDispatcher$1。运行(AbstractJavaResourceMethodDispatcher.java:144) 在org。玻璃鱼。运动衫服务器模型内部的AbstractJavaResourceMethodDispatcher。调用(AbstractJavaResourceMethodDispatcher.java:161) 在org。玻璃鱼。运动衫服务器模型内部的JavaResourceMethodDispatcherProvider$ResponseOutInvoker。doDispatch(JavaResourceMethodDispatcherProvider.java:160) 在org。玻璃鱼。运动衫服务器模型内部的AbstractJavaResourceMethodDispatcher。调度(AbstractJavaResourceMethodDispatcher.java:99) 在org。玻璃鱼。运动衫服务器模型ResourceMethodInvoker。invoke(ResourceMethodInvoker.java:389) 在org。玻璃鱼。运动衫服务器模型ResourceMethodInvoker。apply(ResourceMethodInvoker.java:347) 在org。玻璃鱼。运动衫服务器模型ResourceMethodInvoker。apply(ResourceMethodInvoker.java:102) 在org。玻璃鱼。运动衫服务器服务器运行时$2。运行(ServerRuntime.java:309) 在org。玻璃鱼。运动衫内部的错误1美元。调用(Errors.java:271) 在org。玻璃鱼。运动衫内部的错误1美元。调用(Errors.java:267) 在org。玻璃鱼。运动衫内部的错误。进程(Errors.java:315) 在org。玻璃鱼。运动衫内部的错误。进程(Errors.java:297) 在org。玻璃鱼。运动衫内部的错误。进程(Errors.java:267) 在org。玻璃鱼。运动衫过程内部的请求范围。runInScope(RequestScope.java:317) 在org。玻璃鱼。运动衫服务器服务器运行时。进程(ServerRuntime.java:292) 在org。玻璃鱼。运动衫服务器应用程序处理程序。手le(ApplicationHandler.java:1139) 在org。玻璃鱼。运动衫servlet。网络组件。服务(WebComponent.java:460) 在org。玻璃鱼。运动衫servlet。ServletContainer。服务(ServletContainer.java:386) 在org。玻璃鱼。运动衫servlet。ServletContainer。服务(ServletContainer.java:334) 在org。玻璃鱼。运动衫servlet。ServletContainer。服务(ServletContainer.java:221) 在org。阿帕奇。卡塔琳娜。果心标准包装。服务(StandardWrapper.java:1682) 在org。阿帕奇。卡塔琳娜。果心标准包装阀。调用(StandardWrapperValve.java:318) 在org。阿帕奇。卡塔琳娜。果心标准连接阀。调用(StandardContextValve.java:160) 在org。阿帕奇。卡塔琳娜。果心标准管道。doInvoke(StandardPipeline.java:734) 在org。阿帕奇。卡塔琳娜。果心标准管道。调用(StandardPipeline.java:673) 在com。太阳企业网状物网络管道。调用(WebPipeline.java:99) 在org。阿帕奇。卡塔琳娜。果心标准阀门。调用(StandardHostValve.java:174) 在org。阿帕奇。卡塔琳娜。连接器。郊狼适应者。doService(CoyoteAdapter.java:416) 在org。阿帕奇。卡塔琳娜。连接器。郊狼适应者。服务(CoyoteAdapter.java:283) 在com。太阳企业v3。服务。impl。ContainerMapper$HttpHandlerCallable。调用(ContainerMapper.java:459) 在com。太阳企业v3。服务。impl。集装箱司机。服务(ContainerMapper.java:167) 在org。玻璃鱼。灰熊http。服务器HttpHandler。runService(HttpHandler.java:206) 在org。玻璃鱼。灰熊http。服务器HttpHandler。doHandle(HttpHandler.java:180) 在org。玻璃鱼。灰熊http。服务器HttpServerFilter。handleRead(HttpServerFilter.java:235) 在org。玻璃鱼。灰熊过滤链。遗嘱执行人9美元。execute(executorsolver.java:119) 在org。玻璃鱼。灰熊过滤链。DefaultFilterChain。executeFilter(DefaultFilterChain.java:283) 在org。玻璃鱼。灰熊过滤链。DefaultFilterChain。executeChainPart(DefaultFilterChain.java:200) 在org。玻璃鱼。灰熊过滤链。DefaultFilterChain。执行(DefaultFilterChain.java:132) 在org。玻璃鱼。灰熊过滤链。DefaultFilterChain。进程(DefaultFilterChain.java:111) 在org。玻璃鱼。灰熊处理器执行器。执行(ProcessorExecutor.java:77) 在org。玻璃鱼。灰熊尼奥。运输交通运输。fireIOEvent(TCPNIOTransport.java:536) 在org。玻璃鱼。灰熊策略。抽象策略。fireIOEvent(AbstractIOStrategy.java:112) 在org。玻璃鱼。灰熊策略。工作线程策略。run0(WorkerThreadIOStrategy.java:117) 在org。玻璃鱼。灰熊策略。工作线程策略。访问$100(WorkerThreadIOStrategy.java:56) 在org。玻璃鱼。灰熊策略。WorkerThreadIOStrategy$WorkerThreadRunnable。运行(WorkerThreadIOStrategy.java:137) 在org。玻璃鱼。灰熊线程池。抽象线程池$Worker。doWork(AbstractThreadPool.java:591) 在org。玻璃鱼。灰熊线程池。抽象线程池$Worker。运行(AbstractThreadPool.java:571) 在爪哇。朗。丝线。运行(Thread.java:745) ]]


共 (1) 个答案

  1. # 1 楼答案

    您当前的代码:

    客户端(生成json文本,加密并发送):

        ClientResponse clientResponse = HttpRequests.post("/user/", Crypter.encryptDecryptXOR(new Gson().toJson(data)));
    

    服务器端(解析json,然后解密):

    String s = new Gson().fromJson(data,String.class);
    String decrypt = Crypter.encryptDecryptXOR(s);
    

    。。。看起来您应该在尝试解析JSON数据之前解密(因此解析收到的JSON时会出现格式错误的DJSON异常)

    顺便说一句,String.class可能不是您希望json内容被反序列化到的内容(那么User.class呢?)

    编辑:

    要进行解密,请尝试以下操作:

    String decrypted = Crypter.encryptDecryptXOR(data); 
    SomeClass userData = new Gson().fromJson(decrypted, SomeClass.class);
    

    SomeClass是一个可以容纳json内容的类(用户可能是一个很好的候选者,但您需要对此进行检查)