【问题标题】:invoking a REST client from JSF从 JSF 调用 REST 客户端
【发布时间】:2015-11-29 19:15:57
【问题描述】:

我正在构建一个将 JSF 实现为前端框架的 java EE 应用程序。该应用程序需要使用一个 RESTFul 服务(我拥有但作为单独的应用程序托管)。

我找到了一些关于实现 Restlet 的不错的教程,但是我仍然错过了最后一站。用户应该能够单击一个按钮,本地 REST 客户端将 POST 提交到服务器并评估响应。我很感激有关如何实现这一目标的建议。

【问题讨论】:

  • 我个人会开发一个服务接口来访问您感兴趣的 REST 功能。然后,使用 REST 客户端实现它以访问该服务。然后,以通用方式开发您的 JSF bean 并为其提供对服务的访问。顺便说一句,你想如何管理授权?
  • “一个 本地 REST 客户端” 嗯?具体在哪里?您提出问题的方式给人的印象是您想在客户端使用 JavaScript,而不是在服务器端使用 Java。无论如何..这是阅读的食物,可能是重复的:stackoverflow.com/questions/29982657/…

标签: rest integration jsf-2.2


【解决方案1】:

使用 JSF Managed Beans 中的 Apache HttpClient。

@ManagedBean(eager = true, name = "restAuthBean")
@SessionScoped
public class RESTAuthBean implements Serializable {
 private CloseableHttpClient CLIENT = HttpClients.createDefault();

 public UserModel saveUser(UserModel model) {
        try {
             CLIENT = HttpClients.createDefault();
            LOGGER.debug("RESTAuthBean: save user called ");
            HttpPost request = new HttpPost(AUTH_SERVICE_PATH + "user/register");
            JSONObject json = new JSONObject();
            json.put("firstname", model.getFirstname());
            json.put("lastname", model.getLastname());
            json.put("ip", model.getIp());
            json.put("email", model.getEmail());
            json.put("password", PasswordUtil.hashPassword(model.getPassword()));
            StringEntity params = new StringEntity(json.toString(), "UTF-8");
            request.addHeader("content-type", "application/json;charset=UTF-8");
            request.addHeader("charset", "UTF-8");
            request.setEntity(params);
            HttpResponse response = (HttpResponse) CLIENT.execute(request);
            HttpEntity entity = response.getEntity();
            ObjectMapper mapper = new ObjectMapper();
            model = mapper.readValue((EntityUtils.toString(entity)), UserModel.class);
        } catch (IOException | ParseException ex) {
            LOGGER.debug("RESTAuthBean: save user error " + ex.getLocalizedMessage());
        }
        return model;
    }

【讨论】:

    【解决方案2】:

    感谢您的意见。我一直在努力决定在哪里/如何在集成到应用程序 B(REST,无 GUI)的应用程序 A(JSF)中实现 REST 客户端。

    我的决定是按照 Xtreme Biker 的建议通过 EJB 在服务层实现它,并使用 JAXB 为其他不基于 JSF 的应用程序公开我的控制器方法,如 How to implement JAX-RS RESTful service in JSF framework

    为了澄清进一步的授权也相当复杂,但它将是 3rd 方 api 和 java 安全框架的组合。

    【讨论】:

    • 如果你喜欢 EJB3,我认为你需要使用 wildfly swarm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多