Нужно ли мне попробовать наконец-то для ответа JAX-RS? [Дубликат]

Поместите кавычки вокруг $username. Строковые значения, в отличие от числовых значений, должны быть заключены в кавычки.

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

Кроме того, нет смысла использовать условие LIKE, если вы не используете подстановочные знаки: если вам нужно точное совпадение использует = вместо LIKE.

3
задан Alexandr 12 October 2015 в 14:43
поделиться

2 ответа

Заглядывая в исходный код resteasy-client, Invocation#invoke(Class<T>) просто вызывает Invocation#invoke() и вызывает Invocation#extractResult(GenericType<T> responseType, Response response, Annotation[] annotations) для извлечения результата из Response:

@Override
public <T> T invoke(Class<T> responseType)
{
   Response response = invoke();
   if (Response.class.equals(responseType)) return (T)response;
   return extractResult(new GenericType<T>(responseType), response, null);
}

Invocation#extractResult(GenericType<T> responseType, Response response, Annotation[] annotations) закрывается Ответ в блоке finally:

/**
 * Extracts result from response throwing an appropriate exception if not a successful response.
 *
 * @param responseType
 * @param response
 * @param annotations
 * @param <T>
 * @return
 */
public static <T> T extractResult(GenericType<T> responseType, Response response, Annotation[] annotations)
{
   int status = response.getStatus();
   if (status >= 200 && status < 300)
   {
      try
      {
         if (response.getMediaType() == null)
         {
            return null;
         }
         else
         {
            T rtn = response.readEntity(responseType, annotations);
            if (InputStream.class.isInstance(rtn)
                 || Reader.class.isInstance(rtn))
            {
               if (response instanceof ClientResponse)
               {
                  ClientResponse clientResponse = (ClientResponse)response;
                  clientResponse.noReleaseConnection();
               }
            }
            return rtn;

         }
      }
      catch (WebApplicationException wae)
      {
         try
         {
            response.close();
         }
         catch (Exception e)
         {

         }
         throw wae;
      }
      catch (Throwable throwable)
      {
         try
         {
            response.close();
         }
         catch (Exception e)
         {

         }
         throw new ResponseProcessingException(response, throwable);
      }
      finally
      {
         if (response.getMediaType() == null) response.close();
      }
   }
   try
   {
      // Buffer the entity for any exception thrown as the response may have any entity the user wants
      // We don't want to leave the connection open though.
      String s = String.class.cast(response.getHeaders().getFirst("resteasy.buffer.exception.entity"));
      if (s == null || Boolean.parseBoolean(s))
      {
         response.bufferEntity();
      }
      else
      {
         // close connection
         if (response instanceof ClientResponse)
         {
            try
            {
               ClientResponse.class.cast(response).releaseConnection();
            }
            catch (IOException e)
            {
               // Ignore
            }
         }
      }
      if (status >= 300 && status < 400) throw new RedirectionException(response);

      return handleErrorStatus(response);
   }
   finally
   {
      // close if no content
      if (response.getMediaType() == null) response.close();
   }

}
0
ответ дан Daniel Shuy 29 August 2018 в 01:37
поделиться

Согласно документации close() является идемпотентным.

Эта операция является идемпотентной, то есть она может быть вызвана несколько раз с тем же эффектом, что также означает, что вызов метода close () на уже закрытом экземпляре сообщения является законным и не имеет дальнейшего эффекта.

Таким образом, вы можете безопасно закрыть InputStream самостоятельно и должны.

. Говоря, что стиль wise не сделал бы invocation.invoke(InputStream.class), поскольку invoker(Class) создан для преобразования сущности. Вместо этого, если вы хотите, чтобы InputStream вы, вероятно, просто вызывали invocation.invoke() и имели дело с объектом Response, так как вам может понадобиться информация о заголовке перед чтением потока. Причина, по которой вы хотите использовать заголовки при работе с ответом InputStream, типична, потому что вам или не важно, что тело или тело требуют специальных обработок и соображений размера, о которых идет речь в документации (например, HEAD запрос на ping сервер).

См. также link

Экземпляр сообщения, возвращенный из этого метода, будет кэшироваться для последующего поиска через getEntity (). Если тип поданного объекта не является входным потоком, этот метод автоматически закрывает исходный поток данных исходного объекта ответа, если он открыт. В случае буферизации данных сущности буфер будет сброшен, прежде чем он будет использовать буферизованные данные, чтобы включить последующие вызовы методов readEntity (...) в этом ответе.

Итак, если вы выберете ничего, кроме InputStream, вам не придется закрывать Response (но независимо от того, насколько безопасно это сделать как его идемпотент).

2
ответ дан Dasrath 29 August 2018 в 01:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: