我有一个资源方法,可以按以下方式处理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)
在单元测试期间,端点返回一个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());
我不知道我在这里缺少什么,因为测试工作正常并返回所需的对象,我感觉有点愚蠢。我真的很感激与此有关的任何帮助/建议。现在让我陷入困境已经有一段时间了。