如何让这段代码RESTful? (没有HttpSessions)

时间:2014-04-16 19:09:42

标签: java json rest servlets

我想知道,我有以下代码片段,我想消除会话的使用并使其成为RESTful。我有一个控制器servlet,它使用几个处理程序,用于确定要返回的页面。例如,以下是我的两个处理程序:

public class ReporterLoginHandler implements ActionHandler {

    public String handleIt(Map params, HttpSession session) {
        String reporterId = null;
        String passwd = null;
        String errMsg = null;
        ReporterBean reporterBean = null;
        String returnPage = "home";

        try {
            reporterId = ((String[]) params.get("reporterid"))[0];
            passwd = ((String[]) params.get("passwd"))[0];
        } catch (Exception ex) {
            System.out.println("Oops, couldn't parse the parameters for login!");
        }

        if (reporterId == null || reporterId.length() == 0 || passwd == null || passwd.length() == 0) {
            errMsg = "The reporterID or password cannot be empty";

        } else if ((reporterBean = ReporterBeanFactory.getReporter(reporterId, passwd)) == null) {
            errMsg = "The reporterID or password is not valid";

        }

        if (errMsg != null) {
            session.setAttribute("msg", errMsg); //should be removed and replaced by a RESTful API
        } else }
            returnPage = "reporter_home";
            session.setAttribute("reporterBean", reporterBean);
    }

    return returnPage;
    }

}

public class PostItemHandler implements ActionHandler {

@Override
    public String handleIt(Map<String, String[]> params, HttpSession session) {

        String title = params.get("title")[0];
        String story = params.get("story")[0];
        String itemId = null;
        String returnPage = "home";

        if (params.containsKey("item")) {
            itemId = params.get("item")[0];
        }

        ReporterBean rBean = (ReporterBean) session.getAttribute("reporterBean"); // needs to be replaced by a RESTful API

        String msg = "";
        int id = 0;
        String filename = session.getAttribute("newsfile").toString();

        if (title != null && title.length() > 0 && story != null && story.length() > 0) {
            if (itemId != null && itemId.length() > 0) {
                try {
                    id = Integer.parseInt(itemId);
                } catch (Exception exc) {
                    msg = "Invalid format for news item ID";
                }
                if (rBean != null) {
                    if (msg.equals("") && NewsItemBeanFactory.editNewsItem(id, title, story, rBean.getReporterId())) {
                        msg = "News item " + id + " successfully edited!";
                        returnPage = "reporter_home";
                        try {
                            NewsItemBeanFactory.saveNewsItems(filename);
                        } catch (IOException ex) {
                            Logger.getLogger(PostItemHandler.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    } else {
                        msg = "News item " + id + " could not be edited!";
                    }
                } else }
                    msg = "Error: please log in before adding or editing an item.";
                }
            } else {
                if (rBean != null) {
                    NewsItemBeanFactory.addNewsItem(title, story, rBean.getReporterId());
                    msg = "News item successfully added!";
                    returnPage = "reporter_home";
                    try {
                        NewsItemBeanFactory.saveNewsItems(filename);
                    } catch (IOException ex) {
                        Logger.getLogger(PostItemHandler.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    msg = "Error: please log in before adding a new item.";
                }
            }
        }

        if (params.get("returnpage") != null) {
            if (params.get("returnpage")[0].toString().equals("mynews")) {
                Collection<NewsItemBean> newsItems = NewsItemBeanFactory.getAllItems();
                ArrayList<NewsItemBean> myNewsItems = new ArrayList<NewsItemBean>();

                for (NewsItemBean item : newsItems) {
                    if (rBean != null && rBean.getReporterId().equals(item.getReporterId())) {
                        myNewsItems.add(item);
                    }
                }
                session.setAttribute("mynews", myNewsItems); //needs to be replaced by a RESTful API
                returnPage = "mynews";
            }
        }

        session.setAttribute("msg", msg); //needs to be replaced by a RESTful API

        return returnPage;

   }

}

具体来说,我想从我的处理程序(以及我的控制器servlet)中消除所有会话的使用,并且想要创建一个RESTful API,其中java bean用JSON表示。

我不想使用外部REST API创建者,例如Spring或Jersey,但是,我愿意使用Google的Gson将我的bean转换为JSON。

编辑:此外,我希望登录成功时返回授权令牌。

有人可以帮我吗?

0 个答案:

没有答案