首页 > 解决方案 > 如何从 Java 中的后台服务发送 POST 请求?

问题描述

我目前正在开发一个 Java 应用程序,该应用程序从表 A 读取(存储 BLOB),将表 A 中的一些数据写入表 B,同时将 BLOB 数据上传到文件服务器。我在测试数据库(大约 400 行)上测试了该应用程序,它工作正常。我需要将应用程序实现为读取表 A 并将 HTTP POST 请求发送到 REST 服务器的后台服务,然后插入表 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);
    }
}

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

标签: javahttppost

解决方案


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

@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();
}

推荐阅读