从JSF调用REST客户端

时间:2015-09-03 19:53:36

标签: rest integration jsf-2.2

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

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

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

感谢您的输入。我正在努力决定在应用程序-A(JSF)中实现REST客户端的位置/方式,该客户端集成到应用程序-B(REST,无GUI)。

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

澄清进一步的授权也很复杂,但它将是第三方api和java安全框架的组合。