2017-01-05 3 views
1

Я сделать запрос HTTP GET из базовой программы Java к URL, который случается "http://localhost:9992/users/[email protected]":Получение 405 Ошибка при посылке HTTP GET запрос к веб-сервиса

public class Tester { 
    public static void main(String[] args) { 
     HttpRequester.doesUserExist("[email protected]"); 
    } 
} 

Реализация HTTPRequester является это:

import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class HttpRequester { 
    private static HttpURLConnection connection = null; 

    public static boolean doesUserExist(final String email) { 
    final String targetUrl = Constants.URL_USER_SRVC + email; 
    System.out.println(targetUrl); 
    try { 
     URL url = new URL(targetUrl); 
     connection = (HttpURLConnection) url.openConnection(); 
     System.out.println(connection.getRequestMethod()); 
     connection.setRequestMethod("GET"); 
     connection.setRequestProperty("Content-Type", "application/json"); 
     connection.setUseCaches(false); 
     connection.setDoOutput(true); 

     DataOutputStream outputStream = new DataOutputStream(
       connection.getOutputStream()); 
     outputStream.writeBytes(email); 
     outputStream.close(); 

      InputStream inputStream = connection.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
      StringBuffer response = new StringBuffer(); 
      String line; 
      while((line = reader.readLine()) != null) { 
       response.append(line); 
       response.append('\r'); 
      } 
      reader.close(); 
      System.out.println(response.toString()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return false; 
    } 
} 

вебсервис встроен в Grizzly сервер и вот интерфейсы:

@Path("/users") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public class UserResource { 

    @GET 
    public List<User> getUsers() { 
     return UserService.getUsers(); 
    } 

    @GET 
    @Path("/{userEmail}") 
    public User getUser(@PathParam("userEmail") String userEmail) { 
     return UserService.getUser(userEmail); 
    } 
} 

Обратите внимание, что вебсервис и Java-программа представляют собой два отдельных проекта. Когда я исполняю основной метод я получаю этот выход ошибки в консоли:

java.io.IOException: Server returned HTTP response code: 405 for URL: http://localhost:9992/users/[email protected] 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627) 
at com.axa.visualizr.auth.utils.HttpRequester.doesUserExist(HttpRequester.java:30) 
at com.axa.visualizr.auth.core.Tester.main(Tester.java:8) 

То, что я думаю, что это странно, что выходы ошибок это at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627) хотя я импортировал java.net.HttpURLConnection;. Я попытался открыть объявление на этой строке, но Eclipse заявляет, что он не является допустимым номером строки в этом классе.

Не знаю, почему он говорит, что метод не разрешен, когда у меня есть setRequestMethod("GET"). Может быть, это может быть из-за того, что программа java не работает на каком-либо сервере? Tester.java только для целей тестирования в конце концов, я буду двигаться HTTPRequester к другому WebService и сделать вызов из WebService А в WebService В.

ответ

2

Поскольку вы передаете что-то в запросе, java интерпретирует его как запрос POST. Пожалуйста, удалите приведенные ниже строки из кода и попробуйте:

DataOutputStream outputStream = new DataOutputStream(
       connection.getOutputStream()); 
     outputStream.writeBytes(email); 
     outputStream.close(); 
+0

Это сработало. Благодарю. – cod3min3

0

Try ниже кода:

final String targetUrl = Constants.URL_USER_SRVC + URLEncoder.encode(email, "UTF-8"); 

вместо: конечной строки targetUrl = Константа. URL_USER_SRVC + email;

+0

Я пробовал это. По-прежнему получается такая же ошибка. То, что он сделал, это превратить «/» в «%» – cod3min3

+0

Он не должен преобразовывать «/» в закодированную строку. Ваш адрес электронной почты содержит «@», и только он должен быть закодирован. – Nimesh

+0

Спасибо за помощь – cod3min3

Смежные вопросы