2013-02-05 37 views
8

Tôi đã một phương pháp trong điều khiển Grails tôi rằng nên trả về một JSON, một tài sản của JSON là một đối tượng ngày, nhưng khi tôi làm:Làm thế nào để thiết lập định dạng ngày cho JSON chuyển đổi trong Grails

render myObject as JSON 

đầu ra là:

{ 
    "dateProperty": "2010-12-31T23:00:00Z", 
    "otherProperty" : "aValue..." 
} 

Có cách nào để thay đổi định dạng ngày mặc định được sử dụng từ trình chuyển đổi không?

Tôi đã cố gắng đặt thuộc tính grails.converters.json.date và cũng grails.date.formats trong Config.groovy, nhưng cách này không hiệu quả.
Tôi có làm điều gì đó sai hoặc có cách nào khác để làm điều đó không?

Xin cảm ơn

Trả lời

7

Tôi thường sử dụng một Marshaller tùy chỉnh. Giả sử bạn có tên miền sau

class Address { 
    String addressOne 
    String city 
    //bla bla 
    Date dateCreated 
} 

Tạo một lớp dưới src/groovy như thế này

class AddressMarshaller { 
    void register() { 
    JSON.registerObjectMarshaller(Address) { Address address -> 
     return [ 
     id: address.id, 
     addressOne: address.addressOne, 
     city: address.city, 
     dateCreated: address.dateCreated.format('yyyy-MM-dd') 
     ] 
    } 
} 

Sau đó, trong tập tin Bootstrap bạn thực hiện như sau:

[ new AddressMarshaller() ].each { it.register() } 

Lý do tôi làm điều đó như một mảng như vậy là bởi vì tôi có nhiều marshallers.

Bây giờ, bất cứ lúc nào bạn thực hiện address as JSON, bạn sẽ nhận được JSON bạn đã mô tả và bạn định dạng ngày chính xác. Tôi biết điều này có vẻ như quá mức cần thiết để định dạng một ngày trong JSON nhưng điều này có rất nhiều lợi ích khác.

+0

Tôi có thể tạo Marshaller cho đối tượng của mình ... trong trường hợp này nó không phải là quá mức cần thiết, bởi vì với điều này tôi có thể ẩn thuộc tính _class_ mà nó tự động chèn vào trong JSON được tạo ra. Cảm ơn – rascio

5

Nếu bạn muốn một trình soạn thảo JSON mặc định cho tất cả các loại ngày, bạn cũng có thể sử dụng một cái gì đó rất đơn giản như được hiển thị trong this SO answer. @ Gregg của câu trả lời là rất nhiều linh hoạt hơn cho các lớp miền riêng lẻ.

+0

đây là một mẹo tuyệt vời. Cám ơn vì đã chia sẻ! – Rafael

Các vấn đề liên quan