gpt4 book ai didi

用于 FieldErrors 的 Grails JSON 编码器

转载 作者:行者123 更新时间:2023-12-01 09:30:32 26 4
gpt4 key购买 nike

我正在尝试为 org.springframework.validation.FieldError 创建自定义编码器所以我可以避免在我的 JSON 响应中放入无关的和可能敏感的数据,其中包括 MyCommandObject.errors .

然而,我的 FieldError marshaller 根本不工作,这就是我在 BootStrap.groovy 中的 init 方法下的内容。

    def fieldErrorMarshaller = {
log.info("field error marshaller $it")
def returnArray = [:]

returnArray['field'] = it.field
returnArray['message'] = it.message

return returnArray
}

JSON.registerObjectMarshaller(FieldError, fieldErrorMarshaller)

我没有看到任何明确的错误或编码器日志记录。知道这里可能出了什么问题吗?

最佳答案

Grails 注册了一个 ValidationErrorsMarshaller 的实例处理所有错误,因此您的 FieldError 编码器永远不会被调用。

//convertAnother is not called for each error. That's the reason of your custom marshalled not been called.
for (Object o : errors.getAllErrors()) {
if (o instanceof FieldError) {
FieldError fe = (FieldError) o;
writer.object();
json.property("object", fe.getObjectName());
json.property("field", fe.getField());
json.property("rejected-value", fe.getRejectedValue());
Locale locale = LocaleContextHolder.getLocale();
if (applicationContext != null) {
json.property("message", applicationContext.getMessage(fe, locale));
}
else {
...

看着 ConvertersGrailsPlugin (插件的描述符)这被注册为一个 Spring Bean,所以你可以创建另一个 bean 并使用相同的名称注册,覆盖 marshalObject()以满足您的需求(未测试,可能需要更多代码)。
class MyErrorsMarshaller implements ObjectMarshaller<JSON>, ApplicationContextAware {
ApplicationContext applicationContext;

public boolean supports(Object object) {
return object instanceof Errors;
}

public void marshalObject(Object object, JSON json) throws ConverterException {
...
}

}

资源.groovy
jsonErrorsMarshaller(MyErrorsMarshaller)

errorsJsonMarshallerRegisterer(ObjectMarshallerRegisterer) {
marshaller = { MyErrorsMarshaller om -> }
converterClass = grails.converters.JSON
}

引用 ValidationErrorsMarshaller .

引用 ConvertersGrailsPlugin .

关于用于 FieldErrors 的 Grails JSON 编码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com