Tôi có một servlet, thông qua các tham số truy vấn, nhận danh sách các đối tượng từ DAO, chuyển danh sách thành JSON và gửi nó trở lại trong phản hồi. Mỗi danh sách được làm bằng vật thể có một phương pháp:Làm cách nào bạn có thể chuyển Danh sách <đối tượng triển khai giao diện> sang phương thức?
public String getAsJson(){...}
Và servlet có một loạt các phương pháp chủ yếu là indentical trông giống như:
private String getUserListAsJson() {
List<User> userList = this.dao.getUsers();
StringBuilder builder = new StringBuilder();
builder.append('[');
// loops over the list appending the value of each objects getAsJson()
builder.append(']');
return builder.toString();
}
Vấn đề là tôi có khoảng 6 phương pháp (và đang phát triển) trông giống hệt như vậy ngoại trừ các truy vấn DAO khác nhau. Ý tưởng của tôi là tạo một giao diện chỉ có định nghĩa cho phương thức getAsJson(), làm cho mỗi bean thực hiện điều đó, và sau đó có một phương thức khác trong servlet lấy các đối tượng đã thực hiện giao diện đó. Đã kết thúc tìm kiếm như thế này:
public Interface JsonEnabled {
public String getAsJson();
}
public class User implements JsonEnabled {
....
@Override
public String getAsJson() {...}
}
public class TheServlet {
...
private String getUserListAsJson() {
List<User> userList = this.dao.getUsers();
return this.getListAsJson(userList);
}
private String getListAsJson(List<? implements JsonEnabled> list) {
// The loop code that is in each method.
}
}
Vì vậy, nếu có ai đã thực sự đọc đến đây = P, điều đó không biên dịch và sau khi nhìn lên một số tài liệu từ Oracle, bạn chỉ có thể có kéo dài và không thực hiện cho các thông số chung. Làm cho tất cả các lớp mở rộng từ một lớp trừu tượng mà chỉ có phương thức getAsJson() không có ý nghĩa ngữ nghĩa (các lớp không liên quan).
Tôi chưa tìm thấy giải pháp tốt về SO hoặc chỉ googling xung quanh, vì vậy mọi trợ giúp/thông tin chi tiết sẽ được đánh giá cao.
nhưng bạn có thực sự muốn tự xây dựng chuỗi JSON không? Đề xuất sử dụng thư viện như Jackson hoặc một cái gì đó khác –