私はApache CXFを使用してRest APIを開発しています。現在、クライアント関連のメッセージを集約して、必要なときにクライアントに送り返す方法を見つけようとしています。
たとえばPOST
、クライアントがコレクションにデータを追加するために、リクエストでリソースの 1 つを呼び出したとします。クライアントが間違ったデータを送信すると、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;
}
}