2015-04-19 2 views
1

Я сделал клиентский сервер REST, и все работает более или менее точно. Вот дилемма: у меня есть возможность получить пользователя по имени пользователя, которое отлично работает, когда пользователь действительно существует. Однако, когда он этого не делает, я получаю 204 http-код, и это нормально, поскольку я сделал null-возврат. Я хочу, чтобы мой метод возвращал обычную строку в клиентскую консоль, когда пользователь не найден, скажем, «Нет такого пользователя ...», но тип возвращаемого метода логически является пользователем (классом), чтобы вернуть объект пользователя, когда такой найден. Вот на стороне сервера:REST service return

@GET 
    @Path("/{uName}") 
    @Produces({ "application/json", "application/xml"}) 
    public User getUserByUsername(@PathParam("uName") String uName) { 

     returnAll = usrList.getUsers(); 

     for (User u : returnAll) { 
      if (u.getUserName().equals(uName)) 
       return u; 
     } 

     return null; 
    } 

А вот соответствующая часть клиента:

 case 3: 
      sc.nextLine(); 
      System.out.println("Enter username"); 
      userName = sc.nextLine(); 

      restConnect("http://localhost:8080/rest/user/" 
        + userName, "GET"); 

      promptKey(); 

Изменение метода для возвращения типа String, очевидно, будет нарушать код, когда пользователь фактически найден. Что я могу сделать, чтобы сделать две функции возврата типа? Спасибо

EDIT: Когда пользователь был найден, мой метод вернет первого пользователя в список с get(0), что является неправильным. Это был остаток меня испытывать что-то с удостоверением в

EDITx2: работа клиента

 case 3: 
      sc.nextLine(); 
      System.out.println("Enter username"); 
      userName = sc.nextLine(); 

      try{ 
      restConnect("http://localhost:8080/rest/user/" 
        + URLEncoder.encode(userName, "UTF-8"), "GET"); 
      } 
      catch(RuntimeException e){ 
       System.out.println("No such user..."); 
      } 
      promptKey(); 
+0

Почему бы не выбрасывать исключение и статус http сказать 500? Или почему бы не использовать NullObjectPattern и вместо этого возвратить фиктивный пользователь? – SMA

+0

Потому что я хочу удобную информацию :) – Norgul

ответ

1

Ваш код должен быть возвращающой ошибкой 4xx, когда пользователь не существует, и клиент должен иметь филиал, когда ошибки возвращается.

Подумайте, как все должно работать на клиента, которого вы не разработали самостоятельно, и определение API, вероятно, будет более ясным.

См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html для получения дополнительной информации о деталях результатов.

+0

Я сделал блок try/catch в разделе клиента, который улавливает исключение во время выполнения. Он работает теперь, как я хочу, однако, это хороший подход? – Norgul

+0

Если '' 'restConnect'' 'генерирует исключение, когда возвращается ошибка 4xx, тогда да, это то, что вы хотите. –