Validation Grails3自定义错误对象

Validation Grails3自定义错误对象,validation,grails,gorm,customizing,Validation,Grails,Gorm,Customizing,定制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.a

定制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]"
}]}
我想从上面的响应中去掉“object”,并希望有“错误代码”


我是grails的新手,几乎没有基本的实现。提前感谢。

您可以编写自己的类并用所需的数据填充它。还考虑包括额外的数据,你可能需要

可以使用的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
        }
    }
}
您可以创建一个新的,并在
Bootstrap.groovy
中注册为

JSON.registerObjectMarshaller( new MyCustomValidationErrorsMarshaller() )
只需替换为您的
错误代码
,例如:

json.property( "error-code", HttpStatus.UNPROCESSABLE_ENTITY.value() )
一种快速的方法是在引导中注册对象封送器,但这会使引导类膨胀。编写自定义封送拆收器更简洁


另一种方法是编写一个对象,然后用所需的错误代码替换错误响应中的
对象。

感谢@Raz的响应,但这里的问题是grails域验证失败抛出
验证错误
,它被呈现为我发布的问题。我可以解析这些错误并抛出我自己的异常,但这似乎不对。。。我在看grails是否提供了更好的定制错误响应的方法。