gpt4 book ai didi

java - 如何从 BindingResult 获取 Controller 中的错误文本

转载 作者:IT老高 更新时间:2023-10-28 12:53:15 26 4
gpt4 key购买 nike

我有一个返回 JSON 的 Controller 。它采用一个表单,通过 spring 注释验证自己。我可以从 BindingResult 获取 FieldError 列表,但它们不包含 JSP 将在标记中显示的文本。如何获取错误文本以 JSON 格式发回?

@RequestMapping(method = RequestMethod.POST)
public
@ResponseBody
JSONResponse submit(@Valid AnswerForm answerForm, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response) {

if (result.hasErrors()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
JSONResponse r = new JSONResponse();
r.setStatus(JSONResponseStatus.ERROR);
//HOW DO I GET ERROR MESSAGES OUT OF BindingResult???
} else {
JSONResponse r = new JSONResponse();
r.setStatus(JSONResponseStatus.OK);
return r;
}

}

JSONREsponse 类只是一个 POJO

public class JSONResponse implements Serializable {
private JSONResponseStatus status;
private String error;
private Map<String,String> errors;
private Map<String,Object> data;

...getters and setters...
}

调用 BindingResult.getAllErrors() 返回一个 FieldError 对象数组,但它没有实际错误。

最佳答案

免责声明:我仍然不使用 Spring-MVC 3.0

但我认为 Spring 2.5 使用的相同方法可以满足您的需求

for (Object object : bindingResult.getAllErrors()) {
if(object instanceof FieldError) {
FieldError fieldError = (FieldError) object;

System.out.println(fieldError.getCode());
}

if(object instanceof ObjectError) {
ObjectError objectError = (ObjectError) object;

System.out.println(objectError.getCode());
}
}

希望对你有用

更新

如果你想获取你的资源包提供的消息,你需要一个注册的messageSource实例(它必须被称为messageSource)

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames" value="ValidationMessages"/>
</bean>

在您的 View 中注入(inject)您的 MessageSource 实例

@Autowired
private MessageSource messageSource;

要获取您的信息,请执行以下操作

for (Object object : bindingResult.getAllErrors()) {
if(object instanceof FieldError) {
FieldError fieldError = (FieldError) object;

/**
* Use null as second parameter if you do not use i18n (internationalization)
*/

String message = messageSource.getMessage(fieldError, null);
}
}

你的 validator 应该看起来像

/**
* Use null as fourth parameter if you do not want a default message
*/
errors.rejectValue("<FIELD_NAME_GOES_HERE>", "answerform.questionId.invalid", new Object [] {"123"}, null);

关于java - 如何从 BindingResult 获取 Controller 中的错误文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2751603/

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