我正在使用Apache CXF开发一个Rest API,目前我正在寻找一种方法来聚合与客户端相关的消息,以便在必要时将它们发送回客户端。
例如,假设客户端通过POST
请求调用我的资源之一,以便将数据添加到集合中。如果客户端发送不正确的数据,则将发送HTTP 400
响应。我想要的是在响应有效负载中发送有关数据无效原因的有用消息。这些消息可能来自我的应用程序中的不同类。我目前所做的是我开发了一个 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;
}
}