在Java中,如何从后台服务发送POST请求?

在Java中,如何从后台服务发送POST请求?,java,http,post,Java,Http,Post,我目前正在开发一个Java应用程序,它从表a读取数据(存储BLOB),在将BLOB数据上载到文件服务器时将一些数据从表a写入表B。我在一个测试数据库(大约400行)上测试了这个应用程序,它运行良好。我需要将该应用程序实现为后台服务,读取表a并向REST服务器发送HTTPPOST请求,然后插入表B并上传到文件服务器。POST请求之后,服务器需要返回创建的HTTP 202。我试过这样的方法: @POST @Path("attachments") public void moveToMinio() t

我目前正在开发一个Java应用程序,它从表a读取数据(存储BLOB),在将BLOB数据上载到文件服务器时将一些数据从表a写入表B。我在一个测试数据库(大约400行)上测试了这个应用程序,它运行良好。我需要将该应用程序实现为后台服务,读取表a并向REST服务器发送HTTPPOST请求,然后插入表B并上传到文件服务器。POST请求之后,服务器需要返回创建的HTTP 202。我试过这样的方法:

@POST
@Path("attachments")
public void moveToMinio() throws Exception {
    TiedostoDaoImpl tiedostoDao = new TiedostoDaoImpl();
    List<Integer> id = tiedostoDao.getDistinctCustomerId();
    for (Integer userId : id){
    AttachmentService.insertAndUploadService(userId);
    }
}
@POST
@Path("attachments")
public Response moveToMinio() throws Exception {
    TiedostoDaoImpl tiedostoDao = new TiedostoDaoImpl();
    Integer userId = tiedostoDao.getOneCustomerId();
    String uploadLink = AttachmentService.insertAndUploadService(userId);

    return Response.status(Response.Status.ACCEPTED).entity(uploadLink).build();
}
@POST
@路径(“附件”)
public void moveToMinio()引发异常{
TiedostoDaoImpl tiedostoDao=新的TiedostoDaoImpl();
列表id=tiedostoDao.getDistinctCustomerId();
for(整数userId:id){
AttachmentService.insertAndUploadService(用户ID);
}
}

getDistinctCustomerId()返回表a中不同客户id的列表,并将该id传递给for循环中的AttachmentService.insertAndUploadService()。这在某种程度上完成了任务,但我怀疑这不是正确的方法,因为它返回的是HTTP 200而不是202。这是发送POST请求的正确方式吗?生产数据库可能有数百万行,在不影响服务器效率的情况下处理所有这些行的正确方法是什么?由于我是一名java新手,对此我已经坚持了一段时间,非常感谢您的帮助/建议。

如果您希望在处理每一行之后都有一个http响应,首先您需要将您的方法划分为一次处理一行,然后您可以使用响应来包含您的http代码和实体,如下所示:

@POST
@Path("attachments")
public void moveToMinio() throws Exception {
    TiedostoDaoImpl tiedostoDao = new TiedostoDaoImpl();
    List<Integer> id = tiedostoDao.getDistinctCustomerId();
    for (Integer userId : id){
    AttachmentService.insertAndUploadService(userId);
    }
}
@POST
@Path("attachments")
public Response moveToMinio() throws Exception {
    TiedostoDaoImpl tiedostoDao = new TiedostoDaoImpl();
    Integer userId = tiedostoDao.getOneCustomerId();
    String uploadLink = AttachmentService.insertAndUploadService(userId);

    return Response.status(Response.Status.ACCEPTED).entity(uploadLink).build();
}
请参考这个


在返回响应之前,请将作业放入全局队列,并让后台进程执行该作业。

您的最终问题是什么?返回202?有最大的效率吗?或者我在问题中遗漏了什么?@vahdet我的最终问题是如何将我的应用程序实现为后台服务,向服务器发送POST请求并返回HTTP 202响应。您是否只需要方法moveToMinio来返回202响应?@Azarea是的。当POST请求发送到/attachments时,它开始处理行。可能有数百万行,对于处理的每一行,它都应该返回一个HTTP 202,该HTTP 202通过文件服务器的上载链接被接受。@RoshanUpreti但此方法是一个同步方法,在这种情况下,只有在插入并上载所有用户ID之后,您才能获得类似202的HTTP代码。非常感谢您的帮助。但这不是一次只处理一行吗?我需要处理整个表。@RoshanUpreti但您不能在一个http请求中有多个响应这是否意味着我需要为每个用户ID发送单独的POST请求?@RoshanUpreti是的,这就是我划分您的方法的原因再次感谢您。不过我有个小问题。一个用户标识在表中可以有多行。在这种情况下,它将如何工作?