java كيفية الحصول على نص خطأ في وحدة تحكم من BindingResult



2 Answers

التقيت بهذه المشكلة مؤخرًا ، ووجدت طريقة أسهل (ربما هي دعم الربيع 3)

    List<FieldError> errors = bindingResult.getFieldErrors();
    for (FieldError error : errors ) {
        System.out.println (error.getObjectName() + " - " + error.getDefaultMessage());
    }

ليس هناك حاجة لتغيير / إضافة مصدر الرسالة.

java json spring spring-mvc spring-annotations

لدي جهاز تحكم يعرض JSON. يتطلب نموذجًا ، يتحقق من خلال التعليقات التوضيحية الربيعية. يمكنني الحصول على قائمة FieldError من BindingResult ، ولكنها لا تحتوي على النص الذي يعرضه 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 ولكن لا يحتوي على الأخطاء الفعلية.




BEAN XML:

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

<bean id="messageAccessor" class="org.springframework.context.support.MessageSourceAccessor">
    <constructor-arg index="0" ref="messageSource"/>
</bean> 

JAVA:

for (FieldError error : errors.getFieldErrors()) {
    logger.debug(messageAccessor.getMessage(error));
}

ملاحظة: لن يُرجع استدعاء Errors.getDefaultMessage () بالضرورة نفس الرسالة التي تم إنشاؤها من الأكواد + الكود. defaultMessage هي قيمة منفصلة معرفة عند استدعاء الأسلوب Errors.rejectValue (). راجع Errors.rejectValue () API هنا




Related