在Java中聚合并向最终用户呈现与用户相关的消息

在Java中聚合并向最终用户呈现与用户相关的消息,java,cross-cutting-concerns,Java,Cross Cutting Concerns,我正在使用apachecxf开发restapi,目前我正在寻找一种方法来聚合与客户机相关的消息,以便在必要时将它们发送回客户机 例如,假设客户机通过POST请求调用我的一个资源,以便向集合添加数据。如果客户端发送不正确的数据,则会发送HTTP 400响应。我想要的是在响应负载中发送有用的消息,说明数据无效的原因。这些消息可能来自我的应用程序中的不同类。我目前所做的是开发了一个MessageQueue类,如下所示,该类负责管理这个横切关注点 这是一个好的方法吗?有没有做类似事情的框架,或者有没有更

我正在使用apachecxf开发restapi,目前我正在寻找一种方法来聚合与客户机相关的消息,以便在必要时将它们发送回客户机

例如,假设客户机通过POST请求调用我的一个资源,以便向集合添加数据。如果客户端发送不正确的数据,则会发送HTTP 400响应。我想要的是在响应负载中发送有用的消息,说明数据无效的原因。这些消息可能来自我的应用程序中的不同类。我目前所做的是开发了一个MessageQueue类,如下所示,该类负责管理这个横切关注点

这是一个好的方法吗?有没有做类似事情的框架,或者有没有更好的方法

谢谢

MessageQueue.java

public class MessageQueue {

    private static Map<String, Queue<String>> messagePool = new HashMap<String, Queue<String>>();

    public static synchronized boolean createSession() {
        String threadName = Thread.currentThread().getName();

        if (messagePool.containsKey(threadName)) {
            messagePool.remove(threadName);
        }

        messagePool.put(threadName, new LinkedList<String>());
        return true;
    }

    public static synchronized void addMessage(String message) {
        Queue<String> q = messagePool.get(Thread.currentThread().getName());
        if(q != null){
            q.add(message);
        }
    }

    public static synchronized void removeMessage(String message) {
        Queue<String> q = messagePool.get(Thread.currentThread().getName());
        if(q != null){
            q.remove(message);
        }
    }

    public static synchronized void terminateSession() {
        messagePool.remove(Thread.currentThread().getName());
    }

    public static synchronized String getMessages() {
        Queue<String> q = messagePool.get(Thread.currentThread().getName());
        String messages = "";
        // Concatenate strings
        while (q != null && !q.isEmpty()) {
            //resolve new line feeds and escape all necessary characters
            messages += q.poll().replaceAll("(\\r|\\n)", "").replace("\"", "\\\"") + " - ";         
        }
        //remove last " - "
        if(!messages.equals("")){
            messages = messages.substring(0, messages.length()-3);  
        }
        return messages;
    }
}