Jersey REST API请求无效

时间:2016-04-07 06:48:34

标签: rest jersey jersey-client

这是我第一次使用Web Service,Jersey,Jackson和REST API。 我已经学习了Web Service,Jersey,Jackson和REST API的一些基础知识。

我使用Netbeans IDE开发了一个示例项目。

当我从浏览器调用我的REST API时,我收到以下错误,我发现使用开发人员工具。

请求网址:http://localhost:8080/ImageShowcase/v1/user/login

请求方法:GET

状态代码:405方法不允许

远程地址:127.0.0.1:8080

以下是我在Tomcat 7 Log中收到的错误

SEVERE:将上下文初始化事件发送到类com.sample.jersey.app.MyServlet的侦听器实例的异常

java.lang.IllegalStateException:无法找到API密钥和密钥。无法初始化应用程序。请确保您的API密钥和密钥存储在〜/ .stormpath / apiKey.properties

这是我的项目结构:

enter image description here

在控制器包中,我有以下代码User.java     package com.sample.controller;

import com.sample.model.UserModel;
import com.sample.pojo.UserCredentials;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/user")
public class User {

    @Path("/login")
    @POST 
    @Consumes("application/json")
    @Produces("application/json")
    public Response UserAuthentication(UserCredentials user) {


        String output = "{\"username\":\"xyz\",\"password\":\"abc\"}";

        UserModel userAuthentication = new UserModel();
        if(userAuthentication.AuthenticateUser(user))
            return Response.status(201).entity(output).build();
        else
            return Response.status(201).entity(output).build();
    }
}

以下是我的JerseyClient代码

package com.sample.jerseyclient;


import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class JerseyClient {

  public static void main(String[] args) {
    try {
            System.out.println("Client started");
        Client client = Client.create();

        WebResource webResource = client
           .resource("http://localhost:8080/ImageShowcase/v1/user/login");

        String input = "{\"username\":\"demo\",\"password\":\"demo\"}";
        // POST method
        ClientResponse response = webResource.accept("application/json")
                .type("application/json").post(ClientResponse.class, input);

        // check response status code
        if (response.getStatus() != 201) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + response.getStatus());
        }

        // display response
            String output = response.getEntity(String.class);
        System.out.println("Output from Server .... ");
        System.out.println(output + "\n");
    } catch (Exception e) {
        e.printStackTrace();
    }


    }
}

以下是我的UserModel,我正在实现我的业务逻辑(数据库等)。

package com.sample.model;

import com.sample.pojo.UserCredentials;
import java.sql.*;

public class UserModel {

    public boolean AuthenticateUser(UserCredentials user) {
        Database db = new Database();
        Connection con = null;

        try {
            String username = user.getUsername();
            String password = user.getPassword();
            ResultSet rs;

            con = db.getConnection();
            if (con != null) {
                String selectQuery_UserDetails = "SELECT NAME,PASSWORD FROM USER WHERE NAME=? AND PASSWORD = ?";

                PreparedStatement preparedStatement = con.prepareStatement(selectQuery_UserDetails);
                preparedStatement.setString(1, username);
                preparedStatement.setString(2, password);

                rs = preparedStatement.executeQuery(selectQuery_UserDetails);
                if (rs != null) {
                    return true;
                }
                return false;
            }
        } catch (Exception e) {
            return false;
        } finally {
            db.closeConnection(con);
        }
        return true;
    }
}

这是我的用户凭据POJO类:

package com.sample.pojo;

import org.codehaus.jackson.annotate.JsonProperty;

public class UserCredentials {

    @JsonProperty
    private String username;

    @JsonProperty
    private String password;


    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }
}

我不知道我在这里做错了什么。 我想知道的另一件事是,我使用的结构是否正确。

感谢。

1 个答案:

答案 0 :(得分:0)

虽然这是一个相当陈旧的主题,但我仍然觉得如果它对任何人都有好处,我会想到。

确保在web.xml中设置以下内容

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>