JAX-RS POST выполняет запись в таблицу базы данных, но возвращает нулевой POJO - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть метод ресурса, который обрабатывает запросы POST следующим образом

@POST
public UploadLink postFilesByCustomerId(Attachment attachment) {
    checkIsValidForPost(attachment);
    Integer id = new AttachmentService(user).createNew(attachment);
    URI uri = LinkBuilder.getUriFromResource(this.getClass(), id);
    String uploadLink = fileServer.getUploadLinkForFile(user.getLogicalDB(), attachment.getUuid(), attachment.getFileName());
    UploadLink uLink = new UploadLink();
    uLink.setAttachmentLocation(uri);
    uLink.setUploadLink(uploadLink);
    return uLink;
}

По сути, он принимает экземпляр класса Attachment в качестве аргумента, проверьте, является ли он действительным для POST.Затем создается новая строка с уникальным идентификатором с использованием данных POST, а файловый сервер создает ссылку для загрузки для фактической загрузки файла.UploadLink - это простой POJO, который содержит местоположение ресурса, созданного POST, и ссылку для загрузки, созданную файловым сервером.Затем метод возвращает UploadLink.Когда я тестирую этот API с помощью модульного теста следующим образом, я получаю желаемый вывод.

@Test
public void testPojoPost() throws JsonProcessingException {
    Attachment a = new Attachment();
    a.setCustomerId(101);
    a.setSize(3072);
    a.setFileName("test2.png");
    Response r = post().target("/attachments").entity(a).execute();
    UploadLink uploadLink = ResponseDeserializer.getSinglePojo(r,UploadLink.class);        
    System.out.println("UploadLink uploadLink=" + uploadLink.getUploadLink() + ", attachmentLocation=" + uploadLink.getAttachmentLocation());
}

Это результат выполнения модульного теста (я пропустил URL-адрес сервера)

enter image description here

Во время модульного тестирования конечная точка возвращает объект Uploadlink и печатает как местоположение, так и ссылку для загрузки.Но затем я пытаюсь вызвать этот API из Java-клиента следующим образом.

UploadLink uploadLink = RestClient.post().attachments().execute(attachment);
System.out.println(uploadLink.getUploadLink()+""+uploadLink.getAttachmentLocation());

Это все еще записывает данные в таблицу базы данных.В клиенте у меня есть другой сервис, который предоставляет данные для POST.Программа выдает мне исключение нулевого указателя, когда оно достигает System.out.println(uploadLink.getUploadLink()+""+uploadLink.getAttachmentLocation());

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

...