Java Struts2验证行为怪异

Java Struts2验证行为怪异,java,validation,struts2,Java,Validation,Struts2,这是我的验证方法- @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

这是我的验证方法-

@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");
    }
  }
我不知道他们是从哪里加上去的。这是我的struts配置文件

<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>

响应
字段错误

我需要帮助。谢谢

看起来您的idtopicId类变量是整数,但您正在尝试将它们设置为字符串。

将接受类型转换错误并将它们放入
字段错误中。有些用例更容易将其从堆栈中取出;我不确定这是不是其中之一

为什么要麻烦复制
字段错误
映射?即使您只想在自己的DTO中使用映射,为什么不使用现有的验证机制呢?差别很小,而且更加灵活。然后,您可以将纸张类型验证构建到外部化的业务逻辑中,并简化对其和操作的测试


不相关,但我发现您的代码很难阅读,因为缺少空格。天真的重构:

@覆盖
public void validate(){
errors=newhashmap();
if(StringUtil.isBlank(examCode)){
错误。put(“examCode”,“需要考试代码”);
}
if(StringUtil.isBlank(说明)){
错误。填写(“说明”,“需要纸质说明”);
}
if(StringUtil.isBlank(strPaperType)){
错误。输入(“纸张类型”,“需要纸张类型”);
}否则{
validatePaperType();
}
}
公共void validatePaperType(){
paperType=paperType.getPaperTypeByValue(strPaperType);
如果(paperType==null){
错误。输入(“paperType”,“需要有效的纸张类型”);
返回;
}
if(paperType.equals(paperType.PRACTICE)和&(topicId==null)){
错误。put(“主题Id”,“需要主题Id”);
}
}

如何从堆栈中删除或修改转换拦截器。与发生任何转换错误一样,这些值应该是它们的默认值,而不是将其添加到字段错误中。这样我就知道只有一个地方会进行验证。@Shwetanka不是“转换”拦截器,“conversionError”拦截器。修改拦截器堆栈。
<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>