Ошибка http 500 при отправке запроса post в приложении rest на основе jax-rs

Я пытаюсь реализовать небольшое приложение REST на основе JAX-RS. У него есть внутренний сервер и небольшой клиент. Клиент в основном читает из таблицы и отправляет данные таблицы в виде значений POST на сервер REST. Это метод ресурса, который обрабатывает запрос POST.

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response migrateToMinio(Attachment attachment, @Context UriInfo uriInfo) throws Exception {
    Integer id = attachmentService.createNew(attachment);
    UriBuilder builder = uriInfo.getAbsolutePathBuilder();
    builder.path(Integer.toString(id));
    return Response.created(builder.build()).build();
}

Это клиентский код:

public static void main(String[] args) throws Exception {
    // Fire first (full?) update trigger here
    fireInitialMigration();
    // For subsequent (incremental?) updates, schedule an HTTP POST to occur at a fixed rate:
    EXECUTOR.scheduleAtFixedRate(() -> fireSubsequentUpdate(), INITIAL_DELAY, UPDATE_RATE, TimeUnit.MILLISECONDS);
    // Keep main thread alive
    while (true) ;
}

private static void fireInitialMigration() throws Exception {
    TiedostoService tiedostoService = new TiedostoService();
    List<Tiedosto> tiedostoList = tiedostoService.getAllFiles();
    Client client = ClientBuilder.newClient();
    List<Response> responseList = new ArrayList<>();
    for (Tiedosto tiedosto : tiedostoList){
        Attachment attachment = new Attachment();
        attachment.setCustomerId(tiedosto.getCustomerId());
        attachment.setSize(tiedosto.getFileSize());
        System.out.println(attachment.getCustomerId()+" "+attachment.getSize());
        Response res = client.target("http://localhost:8080/myapp/attachments")
            .request("application/json")
            .post(Entity.entity(attachment, MediaType.APPLICATION_JSON), Response.class);
        responseList.add(res);
    }
    System.out.println(responseList);
}

private static void fireSubsequentUpdate() {
    // Similar to initialMigration(), but change Entity/set of HTTP POSTs according to your needs.
}

fireInitialMigration () должен читать таблицу и сохранять значение в List <>. Затем список повторяется внутри цикла for, значения извлекаются и присваиваются экземплярам класса Attachment и, наконец, отправляются как POST. Теперь при запуске клиента он работает до System.out.println(attachment.getCustomerId()+" "+attachment.getSize());

Выход enter image description here

После этого клиент выдает ошибку запроса HTTP 500, как это

InboundJaxrsResponse{context=ClientResponse{method=POST, uri=http://localhost:8080/myapp/attachments, status=500, reason=Request failed.}}, InboundJaxrsResponse{context=ClientResponse{method=POST, uri=http://localhost:8080/myapp/attachments, status=500, reason=Request failed.}}, InboundJaxrsResponse{context=ClientResponse{method=POST, uri=http://localhost:8080/myapp/attachments, status=500, reason=Request failed.}}

Когда я пытаюсь вручную ввести данные с помощью основного метода в бэкэнде, как этот, он работает нормально.

public static void main(String[] args) {
    AttachmentService attachmentService = new AttachmentService();
    Integer id = null;
    Attachment attachment = new Attachment();
    attachment.setCustomerId(150);
    attachment.setSize(8096);

    try{

        id = attachmentService.createNew(attachment);

    } catch (Exception e) {
        e.printStackTrace();
    }


}

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

500 - это внутренняя ошибка сервера. Загляните в файлы журнала сервера для получения дополнительной информации.

Jens 10.09.2018 09:18

@Jens, я использую сервер grizzly и, похоже, не нашел никаких файлов журналов. :(

Roshan Upreti 10.09.2018 09:24

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

Tanu Garg 10.09.2018 09:27

@TanuGarg, это в основном два целых числа, которые нужно отправить. Когда я передаю их вручную, используя основной метод на стороне бэкэнда, он работает нормально, как и ожидалось.

Roshan Upreti 10.09.2018 09:30

прочтите, может быть, это поможет вам найти файлы журнала: stackoverflow.com/questions/21329733/grizzly-standalone-logg‌ing /…

Jens 10.09.2018 09:35
0
5
259
0

Другие вопросы по теме