2016-04-07 3 views
0

Это первый раз, когда я работаю с 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

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

enter image description here

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

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

Спасибо.

+0

Пожалуйста, обновите ваш вопрос. Начните с соответствующего кода из 'com.sample.jersey.app.MyServlet'. '~/.stormpath/apiKey.properties' - это подсказка для Stormpath, но здесь ничего не видно.Btw, метод запроса на самом деле POST не GET – zyexal

+0

Это та часть, где я запутался и не знаю, почему это так выглядит, хотя у меня не было такого пакета. Это проблема, связанная с Build, потому что перед тем, как реализовать мое решение, я выполнил образец приложения, в котором был этот пакет. Большое спасибо за ваш ответ. –

+0

Еще одна вещь, которую я хочу знать, - это запустить JerseyClient. Могу ли я использовать почтальона для проверки всех этих апи? –

ответ

0

Хотя это довольно старая нить, я все еще чувствовал, что хочу вставить свои мысли, если это может принести пользу любому.

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

<init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
Смежные вопросы