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>
响应
字段错误
我需要帮助。谢谢看起来您的id和topicId类变量是整数,但您正在尝试将它们设置为字符串。将接受类型转换错误并将它们放入
字段错误中。有些用例更容易将其从堆栈中取出;我不确定这是不是其中之一
为什么要麻烦复制字段错误
映射?即使您只想在自己的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>