Плагин JSON Exclusive Marshaller
Мне нужно было решить эту проблему недавно.Я пошел дальше и упаковал решение в плагин, который позволяет вам легко исключать свойства класса из выходных данных JSON-конвертера.Он доступен на портале плагинов Grails.
После того как вы установите плагин , у вас будет доступ к методу класса grails.converters.JSON, который называется excludeFor * ().
Более обширную документацию можно найти здесь: Как использовать маршаллера исключения JSON
Но в основном его можно использовать так:
import grails.converters.JSON
def json, resultTeachersWillSee, resultOtherStudentsWillSee
// Given a TestStudent Domain Class
def student = new TestStudent([
firstName: "Tobias",
lastName: "Funke",
gradePointAverage: 3.6,
studentID: "FS-210-7312",
socialSecurityNumber: "555-55-5555"
])
student.save(flush: true)
// When
JSON.excludeForTeachers(TestStudent, ['socialSecurityNumber', 'id', 'class'])
JSON.use('excludeForTeachers') {
json = new JSON(student)
}
resultTeachersWillSee = json.toString()
// Then
assert resultTeachersWillSee == '{"firstName":"Tobias",
"gradePointAverage":3.6, "lastName":"Funke",
"studentID":"FS-210-7312"}'
// And When
JSON.excludeForOtherStudents(TestStudent, ['gradePointAverage', 'studentID',
'socialSecurityNumber', 'id', 'class'])
JSON.use('excludeForOtherStudents') {
json = new JSON(student)
}
resultOtherStudentsWillSee = json.toString()
// Then
assert resultOtherStudentsWillSee == '{"firstName":"Tobias",
"lastName":"Funke"}'
JSON.excludeForTeachers (...) создает маршаллер именованного объекта с именем excludeForTeachers.Маршаллер исключает три свойства объекта ученика из полученного вывода JSON.свойство socialSecurityNumber явно определено в классе, а свойство id было добавлено GORM за кулисами.В любом случае, учителям не нужно видеть ни одно из этих свойств.
Плагин хорошо мне подходит ... Надеюсь, другие тоже найдут его полезным.