Это первый раз, когда я работаю с API веб-сервисов, Джерси, Джексона и REST. Я рассмотрел некоторые основы веб-службы, Джерси, Джексона и REST API.Джерси Запрос API REST не работает
Я разработал образец проекта с использованием Netbeans IDE.
Когда я вызываю свой REST API из своего браузера, я получаю следующую ошибку, которую я выяснил с помощью инструментов разработчика.
Запрос URL: http://localhost:8080/ImageShowcase/v1/user/login
Запрос Метод: GET
Код состояния: 405 Method Not Allowed
Удаленный адрес: 127.0.0.1: 8080
Ниже ошибка, которую я получил в Tomcat 7 Журнал
SEVERE: Исключение отправки контекста инициализированного события в li экземпляр stier класса com.sample.jersey.app.MyServlet
java.lang.IllegalStateException: Невозможно найти ключ API и секрет. Не удается инициализировать приложение. Пожалуйста, убедитесь, что ваш ключ API и Секретной хранятся в ~/.stormpath/apiKey.properties
Это моя структура проекта:
В пакете контроллера У меня есть следующий код User.java упаковка 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 где я реализую свою BUSSINESS логику (база данных и т.д.).
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;
}
}
Я не получаю то, что я делаю неправильно здесь. Еще одна вещь, которую я хочу знать, заключается в том, правильна ли структура, которую я использую, или нет.
Спасибо.
Пожалуйста, обновите ваш вопрос. Начните с соответствующего кода из 'com.sample.jersey.app.MyServlet'. '~/.stormpath/apiKey.properties' - это подсказка для Stormpath, но здесь ничего не видно.Btw, метод запроса на самом деле POST не GET – zyexal
Это та часть, где я запутался и не знаю, почему это так выглядит, хотя у меня не было такого пакета. Это проблема, связанная с Build, потому что перед тем, как реализовать мое решение, я выполнил образец приложения, в котором был этот пакет. Большое спасибо за ваш ответ. –
Еще одна вещь, которую я хочу знать, - это запустить JerseyClient. Могу ли я использовать почтальона для проверки всех этих апи? –