2011-07-15 32 views

Trả lời

6

XStream cực kỳ tốt khi in đồ thị đối tượng, thậm chí xử lý chu kỳ mà không cần thêm bất kỳ cấu hình hoặc mã bổ sung nào trong lớp học của bạn (tức là không gây rối với toString()). Chỉ cần thêm thư viện và bạn có thể làm điều này với bất kỳ thứ gì và có được kết quả tốt đẹp, hữu ích:

log.debug("The object: {}", new XStream().toXML(anyObject)); 

Điều đó sẽ cho bạn đầu ra XML. Nếu bạn thích JSON, bạn có thể nhận được nó với một chút công việc nhỏ hơn như được mô tả chi tiết trong các XStream JSON tutorial.

0

Tuần tự hóa Java, đi kèm với Java, nên thực hiện thủ thuật. Nó sẽ ở định dạng nhị phân.

Ngoài ra còn có XML serialization có thể được cung cấp bởi JAXB

+0

Bạn có nghĩ định dạng nhị phân phù hợp với tệp nhật ký không? :) – yegor256

+0

Điểm tốt. Tôi vừa thêm liên kết vào JAXB. –

4

Tôi đề nghị bạn nhìn hoặc ở Apache Commons BeanUtils hoặc Apache Commons Lang, cụ thể ReflectionToStringBuilder.

0

bạn có thể sử dụng phản ánh

getClass và sau đó đi qua mỗi biến dụ và tiếp tục (một số đối tượng có thể được xử lý đặc biệt (như Strings))

0

Bạn nên sử dụng phản ánh. Hãy xem java.lang.Class lớp học, cụ thể là phương pháp .getFields().

0

Các java reflection API sẽ cung cấp cho bạn truy cập vào tất cả các công cụ này (thành viên tư nhân và tất cả). Để nhận được các thành viên riêng tư, bạn cần phải nhận yourObject.getClass().getDeclaredFields() để truy cập một trường riêng tư, hãy nhớ gọi số yourField.setAccesible(true) trên đó.

Tất nhiên, bạn sẽ nhanh chóng gặp phải vấn đề bằng cách kiểm tra lớp học của riêng mình để thực hiện điều này thông qua phản ánh. Các vấn đề chính xuất hiện khi cố gắng quyết định cuối cùng in một giá trị và xác định nếu nó là một enum, một nguyên thủy, một mảng nguyên thủy và vân vân. Bạn có thể sử dụng phương thức Class.isPrimitive để giúp tìm ra bước đó. Để truy cập các phần tử của một mảng, hãy sử dụng lớp java.lang.reflect.Array.

Tùy chọn tốt nhất, được đăng trước đó, là sử dụng số ReflectionToStringBuilder của dấu phẩy apache.

0

Trình nối tiếp json sẽ thực hiện công việc, ví dụ: sử dụng Gson:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import com.google.gson.Gson; 

... 

private static final Logger LOG = LoggerFactory.getLogger(Your.class); 

... 

Object obj = ...; 
LOG.info(new Gson().toJson(obj)); 
Các vấn đề liên quan