0

Grails 1.3.7を使用しているため、ドメインクラスが宣言されています

StudentReport{
  String username
  String studentName
}

 def sp = StudentReport.createCriteria()



def studentReportList = sp.list {

            projections {
               property 'username'
                property 'studentName'
            }
            firstResult 0
            maxResults 20
            order("id", "asc")
        } 
render studentReportList as JSON

My expected result is

[
{"username":"13B06","student_name":"JOHN SAMUEL"},
{"username":"13B07","student_name":"KATHIRESAN.K"},
{"username":"13B08","student_name":"KATHIRESAN.K"},
{"username":"13B11","student_name":"MALINI.S"}
]

But what i get is

[
   ["13B06","JOHN SAMUEL"],
   ["13B07","KATHIRESAN.K"],
   ["13B08","KATHIRESAN.K"],
   ["13B11","MALINI.S"]
]

プロパティ名と中括弧が必要です。誰でも私を助けてくれませんか。コントローラーでプロジェクションを使用せずに試してみたところ、正確な結果が得られましたが、プロジェクションを使用しようとすると、同じ結果が得られませんでした。

4

1 に答える 1

2
[ {"13B06","JOHN SAMUEL"},{"13B07","KATHIRESAN.K"},{"13B08","KATHIRESAN.K"},{"13B11","MALINI.S"} ]

は有効な JSON ではありません。studentReportListリストのリストであるため、現在取得している出力は正しいため、JSON は配列の配列である必要があります。中括弧が必要な場合、内部要素は配列ではなくJSONオブジェクトである必要があります。引き起こす

[
  {"username":"13B06","student_name":"JOHN SAMUEL"},
  ...
]

適切な結果トランスフォーマーを基準に追加し、property射影メソッドの 2 つの引数形式を使用して正しいエイリアスを割り当てることができます。

def studentReportList = sp.list{
        projections {
           property 'username', 'username'
            property 'studentName', 'student_name'
        }
        firstResult 0
        maxResults 20
        order("id", "asc")
        resultTransformer AliasToEntityMapResultTransformer.INSTANCE
    }

(適切な importと共に) 条件がリストのリストではなくマップのリストを返すようにします。

于 2013-10-08T14:18:49.100 に答える