这是我的验证方法 -
@Override
public void validate() {
errors = new HashMap<String, String>();
if(StringUtil.isBlank(examCode)){
errors.put("examCode", "Exam code is required");
}
if(StringUtil.isBlank(strPaperType)){
errors.put("paperType", "Paper Type is required");
}else{
paperType = PaperType.getPaperTypeByValue(strPaperType);
if(paperType == null){
errors.put("paperType", "A valid Paper Type is required");
}
if(paperType.equals(PaperType.PRACTICE)){
if(topicId ==null){
errors.put("topicId", "Topic Id is required");
}
}
}
if(StringUtil.isBlank(instructions)){
errors.put("instructions", "Paper Instructions are required");
}
}
'errors'是我在动作中定义的地图。我没有在'fieldErrors'中添加任何错误。如果我调试'fieldErrors'我甚至在进入'验证'方法之前发生了什么我看到以下两个条目 -
{"id":["Invalid field value for field \"id\"."],"topicId":["Invalid field value for field \"topicId\"."]}
我不知道他们在哪里被添加。这是我的struts conf。
<package name="api" extends="json-default" namespace="/api">
<action name="paper" class="paperApiAction">
<result name="json" type="json">
<param name="root">responseDto</param>
</result>
<result name="input" type="json">
<param name="root">fieldErrors</param>
</result>
</action>
</package>
需要帮助。感谢
答案 0 :(得分:2)
"conversionError" interceptor会收到类型转换错误并将其放入fieldErrors
。有一些用例,它更容易从堆栈中取出;我不确定这是不是其中之一。
为什么要重复fieldErrors
地图?即使您只想在自己的DTO中使用地图,为什么不使用现有的验证机制?差异是微不足道的,而且更加灵活。然后,您可以将纸张类型验证构建到外部化业务逻辑中,并简化对它和操作的测试。
不相关,但由于缺少空白,我发现您的代码难以阅读。一个天真的重构:
@Override
public void validate() {
errors = new HashMap<String, String>();
if (StringUtil.isBlank(examCode)) {
errors.put("examCode", "Exam code is required");
}
if (StringUtil.isBlank(instructions)) {
errors.put("instructions", "Paper Instructions are required");
}
if (StringUtil.isBlank(strPaperType)) {
errors.put("paperType", "Paper Type is required");
} else {
validatePaperType();
}
}
public void validatePaperType() {
paperType = PaperType.getPaperTypeByValue(strPaperType);
if (paperType == null) {
errors.put("paperType", "A valid Paper Type is required");
return;
}
if (paperType.equals(PaperType.PRACTICE) && (topicId == null)) {
errors.put("topicId", "Topic Id is required");
}
}
答案 1 :(得分:0)
您似乎 id 且 topicId 类变量是整数,但您尝试将它们设置为字符串。