Запрос REST API Джерси не работает

Я впервые работаю с Web Service, Jersey, Jackson и REST API. Я прошел некоторые основы веб-сервиса, Джерси, Джексона и REST API.

Я разработал пример проекта с использованием IDE Netbeans.

Когда я вызываю свой REST API из своего браузера, я получаю следующую ошибку, которую я выяснил с помощью инструментов разработчика.

URL-адрес запроса: http://localhost:8080/ImageShowcase/v1/user/login

Метод запроса: ПОЛУЧИТЬ

Код состояния: 405 Метод не разрешен

Удаленный адрес: 127.0.0.1:8080

Ниже приведена ошибка, которую я получил в журнале Tomcat 7.

СЕРЬЕЗНОЕ: Исключение, отправляющее событие инициализации контекста экземпляру прослушивателя класса com.sample.jersey.app.MyServlet

java.lang.IllegalStateException: невозможно найти ключ и секрет API. Не удается инициализировать приложение. Убедитесь, что ваш ключ и секрет API сохранены в ~/.stormpath/apiKey.properties.

Это моя структура проекта:

введите здесь описание изображения

В пакете контроллера у меня есть следующий код 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;
    }
}

Я не понимаю, что я делаю неправильно здесь. Еще одна вещь, которую я хочу знать, это правильная структура, которую я использую.

Спасибо.


person Shivkumar Mallesappa    schedule 07.04.2016    source источник
comment
Пожалуйста, обновите свой вопрос. Начните с соответствующего кода из com.sample.jersey.app.MyServlet. ~/.stormpath/apiKey.properties — это подсказка для Stormpath, но здесь не на что смотреть. Кстати, метод запроса на самом деле POST, а не GET   -  person zyexal    schedule 07.04.2016
comment
Это та часть, где я сбит с толку и не знаю, почему это отображается так, хотя у меня не было такого пакета. Является ли это проблемой, связанной со сборкой, потому что перед реализацией моего решения я выполнил пример приложения, которое содержало этот пакет. Большое спасибо за Ваш ответ.   -  person Shivkumar Mallesappa    schedule 07.04.2016
comment
Еще одна вещь, которую я хочу знать, это как запустить JerseyClient. Могу ли я использовать почтальона для тестирования всех этих API?   -  person Shivkumar Mallesappa    schedule 07.04.2016
comment
@zyexal: сейчас я использую POSTMAN для тестирования своего API, и я получаю 415 неподдерживаемых типов мультимедиа для того же кода выше в новом и другом проекте.   -  person Shivkumar Mallesappa    schedule 07.04.2016
comment
Я воссоздал проект с тем же кодом, и он у меня работает. Я думаю, что была проблема во время сборки.   -  person Shivkumar Mallesappa    schedule 08.04.2016


Ответы (1)


Хотя это довольно старая ветка, я все же подумал, может ли это принести пользу кому-либо.

Убедитесь, что в web.xml установлено следующее

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
person Sudeep Agrawal    schedule 18.04.2017