2016-04-07 82 views
0

這是我第一次使用Web Service,Jersey,Jackson和REST API。 我已經經歷了Web服務,Jersey,Jackson和REST API的一些基礎知識。Jersey REST API請求不起作用

我開發了一個使用Netbeans IDE的示例項目。

當我從我的瀏覽器調用我的REST API時,我收到以下使用開發人員工具發現的錯誤。

請求URL:http://localhost:8080/ImageShowcase/v1/user/login

請求方法:GET

狀態代碼:405不允許的方法

遠程地址:127.0.0.1:8080

以下是錯誤,我在Tomcat 7中獲得日誌

SEVERE:異常發送上下文初始化事件給李stener類的實例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; 
    } 
} 

我沒有得到什麼,我做錯了。 我想知道的另一件事是,我使用的結構是否正確。

謝謝。

+0

請更新您的問題設置。從'com.sample.jersey.app.MyServlet'的相關代碼開始。 '〜/ .stormpath/apiKey.properties'是Stormpath的一個提示,但沒有在這裏看到。順便說一句,請求方法實際上是POST不GET GET – zyexal

+0

這是我困惑的部分,不知道它爲什麼這樣顯示,即使我沒有這樣的包。 這是與Build有關的問題,因爲在實現我的解決方案之前,我執行了一個包含此包的示例應用程序。 非常感謝您的回覆。 –

+0

我想知道的另一件事是如何運行JerseyClient。 我可以使用郵遞員測試所有這些API嗎? –

回答

0

儘管這是一條相當古老的線索,但我仍然覺得如果它可以使任何人受益,我都會覺得自己的想法。

請確保以下是在web.xml

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