JAX-RS POST写入数据库表,但返回空POJO

时间:2018-09-26 17:41:49

标签: java post jax-rs

我有一个资源方法,可以按以下方式处理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数据创建具有唯一ID的新行,然后由文件服务器生成实际文件上传的上传链接。 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对象,并打印位置和uploadlink。但是然后,我尝试从这样的Java客户端调用该API。

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

这仍将数据写入数据库表中。在客户端中,我还有另一个服务,该服务为POST提供数据。该程序在到达System.out.println(uploadLink.getUploadLink()+""+uploadLink.getAttachmentLocation());

时给我一个Null指针异常

我不知道我在这里缺少什么,因为测试工作正常并返回所需的对象,我感觉有点愚蠢。我真的很感激与此有关的任何帮助/建议。现在让我陷入困境已经有一段时间了。

0 个答案:

没有答案