Dies ist das erste Mal, dass ich mit Web Service, Jersey, Jackson und REST API arbeite. Ich habe einige Grundlagen des Web Service, Jersey, Jackson und REST API durchlaufen.Jersey REST API Anfrage funktioniert nicht
Ich habe ein Beispielprojekt mit Netbeans IDE entwickelt.
Wenn ich meine REST-API über meinen Browser aufruft, erhalte ich den folgenden Fehler, den ich mit Hilfe von Entwicklertools herausgefunden habe.
Anforderungs-URL: http://localhost:8080/ImageShowcase/v1/user/login
Anfrage Methode: GET
Statuscode: 405 Methode nicht
erlaubtRemote-Adresse: 127.0.0.1: 8080
Im Folgenden ist der Fehler die ich bekam in Tomcat 7 Log
SEVERE: Ausnahme senden Kontextinitialisierung Ereignis zu li stener Instanz der Klasse com.sample.jersey.app.MyServlet
java.lang.IllegalStateException: Kann nicht API-Schlüssel und Geheimnis lokalisieren. Die Anwendung kann nicht initialisiert werden. Bitte stellen Sie sicher, dass Ihr API-Schlüssel und Geheim gespeichert in ~/.stormpath/apiKey.properties
Das ist meine Projektstruktur:
In dem Controller-Paket mir den folgenden Code User.java habe Paket 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();
}
}
Das folgende ist mein JerseyClient-Code
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();
}
}
}
Nach meiner UserModel ist, wo ich meine bussiness-Logik (Datenbank, etc.) bin der Umsetzung.
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;
}
}
Das ist meine POJO-Klasse für Benutzerdaten:
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;
}
}
ich nicht bekommen, was ich hier falsch mache. Eine andere Sache, die ich wissen möchte, ist, ob die Struktur, die ich verwende, korrekt ist oder nicht.
Danke.
Sie bitte Ihre Frage aktualisieren. Beginnen Sie mit dem entsprechenden Code aus 'com.sample.jersey.app.MyServlet'. '~/.stormpath/apiKey.properties' ist ein Hinweis für Stormpath, aber hier ist nichts zu sehen.BTW, Anfrage Methode ist eigentlich POST nicht GET – zyexal
Das ist der Teil, wo ich verwirrt bin und weiß nicht, warum es so zeigt, obwohl ich kein solches Paket hatte. Ist dies das Problem im Zusammenhang mit Build, weil ich vor der Implementierung meiner Lösung eine Beispielanwendung ausgeführt habe, die dieses Paket enthielt. Vielen Dank für Ihre Antwort. –
Eine andere Sache, die ich wissen möchte, ist, wie man JerseyClient laufen lässt. Kann ich Postman verwenden, um alle diese APIs zu testen? –