4

grailsドメイン制約の検証失敗によって返されるデフォルトのエラーオブジェクトをカスタマイズする最良の方法は何ですか?

私が取得している現在のJSONは

{"errors": [{"object": "com.self.learning.grails.demo.api.Person", 
    "field": "name",
    "rejected-value": "K12332434",
    "message": "Property [orgKey] of class [class com.self.learning.grails.demo.api.Person] with value [K123324343432432432432] exceeds the maximum size of [12]"
}]}

上記の応答から「オブジェクト」を取り除き、「エラーコード」が必要です。

私はgrailsにかなり慣れていないため、いくつかの基本的な実装に苦労しています。前もって感謝します。

4

2 に答える 2

2

検証エラー用の新しいカスタム マーシャラーを作成し、それを次のBootstrap.groovyように登録できます。

JSON.registerObjectMarshaller( new MyCustomValidationErrorsMarshaller() )

この行をあなたの例に置き換えるだけerror-codeです:

json.property( "error-code", HttpStatus.UNPROCESSABLE_ENTITY.value() )

簡単な方法は、ブートストラップにオブジェクト マーシャラーを登録することですが、ブートストラップ クラスが肥大化します。カスタム マーシャラーを作成する方がクリーンです。

別の方法は、インターセプターインターセプト応答objectを作成し、エラー応答を目的のエラー コードに置き換えるだけです。

于 2015-12-31T18:27:51.887 に答える
0

独自のクラスを作成し、必要なデータを入力できます。必要な追加データを含めることも検討してください

使用できる BaseException の例:

public class BaseException extends Exception {
    static def userService
    //import org.apache.commons.logging.LogFactory
    private static final log = LogFactory.getLog(this)

    private int status ;
    private String devMessage;
    private String extendedMessage;
    private String moreInfo;
    private int errorCode;
    boolean error = true;

    public BaseException(int status,int errorCode,String message, String extendedMessage ,String moreInfo){
        this.errorCode = errorCode;
        this.status = status;
        this.devMessage = message;
        this.extendedMessage = extendedMessage;
        this.moreInfo = moreInfo;
    }

    public JSONObject errorResponse(){
        JSONObject errorJson = new JSONObject();
        errorJson.put("status",this.status);
        errorJson.put("errorCode",this.errorCode);
        errorJson.put("message",this.devMessage);
        errorJson.put("extendedMessage",this.extendedMessage);
        errorJson.put("error",error);
        errorJson.put("dateTimeStamp", new Timestamp(new Date().time).toString());
        return errorJson;
    }

    public static BaseException createBaseException(String jsonStr) {
        try {
            def json = new JsonSlurper().parseText(jsonStr)
            return new BaseException(json["status"],json["errorCode"],json["message"], json["extendedMessage"] ,json["moreInfo"])
        } catch (Exception ex) {
            return null
        }
    }
}
于 2015-12-30T22:33:17.413 に答える