【问题标题】:Java App Consume POST request and Open New Browser Page Displaying contentJava App 使用 POST 请求并打开新的浏览器页面显示内容
【发布时间】:2020-01-08 14:46:27
【问题描述】:

我正在寻找设计建议。外部供应商通过 HTTP POST 请求向我发送数据,我将在我的 Java 应用程序中使用这些数据。我需要使用该数据,然后将其显示在新的浏览器网页中。

目前,我使用 POST 请求,将数据存储在缓存中,然后让供应商将用户重定向到我的 Angular UI 页面,该页面执行 HTTP Get 并检索刚刚发布的数据,然后我清除缓存。

它有效,但我知道这不是处理这个问题的最佳方法。有什么想法吗?

这是我的控制器类代码的简化版本

公共类 myController {

@Inject
IVendorObject obj;

@Inject
CacheManager cache;

@POST
@Path("/post-vendor-data")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response createThisObject(@Valid VendorObject obj) {
    cache.put("myKey", obj);    
    return Response.ok(OBJ).build();
}

@GET
@Path("/get-vendor-data")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public VendorObject getThisObject() {
    obj = cache.get("myKey"); 
    cache.remove("myKey");
    return obj;
}   

}

【问题讨论】:

  • 供应商可以在开始时通过 POST 请求重定向到您的 UI 页面,其中包含现在缓存的所有数据。我希望:)
  • 也许我误解了你,但我不相信你可以直接向 UI 页面发送 POST 请求,除非它是一个简单的 HTML 表单帖子。
  • 有可能,而且被广泛使用
  • 如果数据应该只显示在一页上,那么所有接收到的数据都可以存储在script标签中作为json返回的html中。否则我会将数据保存在用户的 http 会话中。
  • 谢谢,我正在探索第一个选项。

标签: java angular


【解决方案1】:

对于任何有类似要求的人来说,这是一个更好而且可能是最简单的选择,这要感谢 edwgiz 的上述 cmets 激励我朝着这个方向前进。

缓存、重定向和 Angular 已被消除,我只是将请求转发到 jsp 页面。上述两种方法现在都简化为:

    @POST
    @Path("/post-vendor-data")
    @Produces(MediaType.TEXT_HTML)
    @Consumes(MediaType.APPLICATION_JSON)
    public void createThisObject(@Valid VendorObject obj) throws IOException, ServletException {
        RequestDispatcher view = request.getRequestDispatcher("/index.jsp");
        request.setAttribute("myObject", obj);
        view.forward(request, response);
    }

【讨论】:

    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多