Tôi đang phát triển một giao diện RESTful được sử dụng để cung cấp dữ liệu JSON cho một ứng dụng JavaScript.Ràng buộc JSON để lồng vào các đối tượng miền Grails
Ở phía máy chủ, tôi sử dụng Grails 1.3.7 và sử dụng đối tượng tên miền GORM để duy trì. Tôi thực hiện một tùy chỉnh JSON marshaller để hỗ trợ marshalling lĩnh vực lồng đối tượng
Dưới đây là mẫu vật miền:
class SampleDomain {
static mapping = { nest2 cascade: 'all' }
String someString
SampleDomainNested nest2
}
và
class SampleDomainNested {
String someField
}
Nguồn SampleDomain được công bố theo URL/rs/mẫu/so/rs/sample/1 điểm đối tượng SampleDomain với ID 1
Khi tôi hiển thị tài nguyên bằng cách sử dụng trình soạn thảo json tùy chỉnh của tôi (GET on/rs/sample/1), tôi nhận được các dữ liệu sau:
{
"someString" : "somevalue1",
"nest2" : {
"someField" : "someothervalue"
}
}
chính xác là những gì tôi muốn.
Hiện đã xảy ra sự cố: Tôi cố gắng gửi cùng một dữ liệu đến tài nguyên/rs/sample/1 qua PUT.
Để liên kết dữ liệu json với đối tượng miền, trình điều khiển xử lý yêu cầu gọi def domain = SampleDomain.get(id)
và domain.properties = data
nơi dữ liệu là đối tượng chưa được sửa đổi.
Ràng buộc cho trường "someString" đang hoạt động tốt, nhưng đối tượng lồng nhau không được điền bằng cách sử dụng dữ liệu lồng nhau để tôi nhận được lỗi rằng thuộc tính "nest2" là rỗng, không được phép.
Tôi đã thử triển khai PropertyEditorSupport
tùy chỉnh cũng như StructuredPropertyEditor
và đăng ký trình chỉnh sửa cho lớp học.
Thật lạ, trình chỉnh sửa chỉ được gọi khi tôi cung cấp các giá trị không lồng nhau. Vì vậy, khi tôi gửi thông tin sau đến máy chủ thông qua PUT (không có ý nghĩa gì;))
{
"someString" : "somevalue1",
"nest2" : "test"
}
ít nhất là trình chỉnh sửa thuộc tính được gọi.
Tôi đã xem mã số GrailsDataBinder
. Tôi phát hiện ra rằng việc thiết tính chất của một hiệp hội dường như làm việc bằng cách xác định con đường của hiệp hội thay vì cung cấp một bản đồ, vì vậy các công trình sau đây cũng như:
{
"someString" : "somevalue1",
"nest2.somefield" : "someothervalue"
}
nhưng điều này không giúp tôi kể từ khi tôi don' t muốn triển khai JavaScript tùy chỉnh cho trình nối tiếp đối tượng JSON.
Có thể sử dụng liên kết dữ liệu Grails bằng các bản đồ lồng nhau không? Hay tôi thực sự muốn thực hiện điều đó bằng tay cho mỗi lớp miền?
Thanks a lot,
Martin
bạn cũng có một trình sửa đổi json tùy chỉnh không? – fixitagain
Không, tôi không có trình chỉnh sửa json tùy chỉnh. Tôi phân tích cú pháp yêu cầu bằng cách sử dụng request.JSON. Những gì tôi muốn là một trình soạn thảo thuộc tính hỗ trợ cả việc tạo một đối tượng miền từ một Bản đồ cũng như tải/ánh xạ một đối tượng miền theo ID. – frow
Bạn đã thử plugin này: http://www.grails.org/plugin/json-rest-api –