2

grails プラグインを 1.3.4 から grails 2.1.1 にアップグレード中です。アップグレード後、以前は失敗しなかった統合テストが失敗するようになりました。"as JSON" (grails.converters.JSON) を使用すると失敗します。

    @Test
public void testConvertCollectionOfEnvironmentSettingsToJSON() {
    EnvironmentSetting setting = configurationService.getEnvironmentSetting('ENFORCE_SCHEMA_INSTANCE_RULE')

    def jsonSetting = setting as JSON //exception thrown here
    def s = jsonSetting as String

    assertNotNull jsonSetting
}

例外とスタック トレース:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'com.company.ipsvc.configuration.domain.EnvironmentSettingAllRevs@48c12420' with class 'com.company.ipsvc.configuration.domain.EnvironmentSettingAllRevs' to class 'grails.converters.JSON'
at com.company.ipsvc.configuration.converter.json.basic.BasicEnvironmentSettingJSONIntegrationTests.testConvertCollectionOfEnvironmentSettingsToJSON(BasicEnvironmentSettingJSONIntegrationTests.groovy:28)

encodeAsJSON() を正常に使用できます。私もXMLと同じ問題を抱えています。

4

3 に答える 3

5

as JSONデフォルトでは、コンバーター (構文) はドメイン オブジェクトとコレクションでのみ機能すると思います。

任意のオブジェクトを変換するには、encodeAsJSON()コンバーターを使用する必要があると思います。または、コンバーターにオブジェクトの処理方法を伝えるオブジェクト マーシャラーを使用します。

ただし、ドキュメントはこれについてあまり明確ではありません..

見る:

しかし、 http://grails.org/doc/latest/api/grails/converters/JSON.html#JSON%28java.lang.Object%29は、オブジェクトが POGO を変換すると言っていることに注意してください。マーシャラー?

私もこの参照を見つけました:

「as」演算子はプレーン オブジェクトに対してオーバーロードされていないことに注意してください ...

ドメイン オブジェクトは、'as' 演算子を使用して、コレクションと同じようにオブジェクトを JSON にキャストできます。そのため、POGO とは異なり、リストにマッサージするか、encodeAsJSON を明示的に呼び出す必要があります ...

http://manbuildswebsite.com/2010/02/08/rendering-json-in-grails-part-2-plain-old-groovy-objects-and-domain-objects/

これは状況を説明しているようです。

于 2012-10-18T00:00:44.387 に答える
1

ドメイン以外のオブジェクトの場合、テストの実行時にこれが発生することがわかりました...私たちにとっての解決策は、新しい JSON を使用することでした:

render new JSON( obj )

これにより、テストが機能し、コードは(本質的に)同じことを行います

于 2015-06-22T20:46:17.513 に答える
0

grails 2.2.1 を使用した単体テストを壊す同様の問題に遭遇しました。問題となったのは、ストレートobj as JSONコンバージョンの試みでした。しかし、これは代わりに型キャストとして解釈されました。

回避策は、obj を詰め込んで、このようなマップに変換することです[data:obj] as JSON

于 2013-08-06T15:49:33.037 に答える