`

SpringMVC杂记(十四) Ajax方式的JSR303认证

阅读更多
自己定义一个Exception,用来表示数据绑定失败
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.validation.BindingResult;

import ying.vehicle.commons.validation.BindingResultUtils;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
public class DataBindingException extends RuntimeException {

	private static final long serialVersionUID = 4886698281191876208L;

	@JsonProperty
	private boolean success = true;
	
	@JsonProperty
	private List<String> globalErrors = new ArrayList<String>();
	
	@JsonProperty
	private Map<String, List<String>> fieldErrors = new HashMap<String, List<String>>();

	public DataBindingException(BindingResult bindingResult) {
		if (bindingResult.hasErrors()) {
			success = false;
			globalErrors = BindingResultUtils.getGlobalErrors(bindingResult);
			fieldErrors  = BindingResultUtils.getFieldErros(bindingResult);
		} 
	}

	// getter & setter
	public boolean isSuccess() {
		return success;
	}

	public void setSuccess(boolean success) {
		this.success = success;
	}

	public List<String> getGlobalErrors() {
		return globalErrors;
	}

	public void setGlobalErrors(List<String> globalErrors) {
		this.globalErrors = globalErrors;
	}

	public Map<String, List<String>> getFieldErrors() {
		return fieldErrors;
	}

	public void setFieldErrors(Map<String, List<String>> fieldErrors) {
		this.fieldErrors = fieldErrors;
	}
	
}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;

public class BindingResultUtils {

	private BindingResultUtils() {
	}
	
	public static Object getErrorMessages(BindingResult bindingResult) {
		if (bindingResult == null) {
			return null;
		}

		Map<String, Object> root = new HashMap<String, Object>();
		if (bindingResult.hasErrors()) {
			root.put("success", false);
			root.put("globalErrors", getGlobalErrors(bindingResult));
			root.put("fieldErrors",  getFieldErros(bindingResult));
		} else {
			root.put("success", true);
		}
		
		return root;
	}

	public static List<String> getGlobalErrors(BindingResult bindingResult) {
		List<String> globalErrors = new ArrayList<String>();
		for (ObjectError oe : bindingResult.getGlobalErrors()) {
			globalErrors.add(oe.getDefaultMessage());
		}
		return globalErrors;
	}
	
	public static Map<String, List<String>> getFieldErros(BindingResult bindingResult) {
		Map<String, List<String>> fieldErrors = new HashMap<String, List<String>>();
		for (FieldError fe : bindingResult.getFieldErrors()) {
			String f = fe.getField();
			
			if (fieldErrors.get(f) != null) {
				fieldErrors.get(f).add(fe.getDefaultMessage());
			} else {
				List<String> list = new LinkedList<String>();
				list.add(fe.getDefaultMessage());
				fieldErrors.put(f, list);
			}
		}
		return fieldErrors;
	}
}


spring-mvc 3.2.x有一个新标注 @ControllerAdvice 在异常处理的场合,很好用
@ControllerAdvice
public class ApplicationControllerAdvice {

	@ResponseStatus(HttpStatus.OK)
	@ExceptionHandler(DataBindingException.class)
	public @ResponseBody Object handleDataBindingException(NativeWebRequest request, DataBindingException ex) {
		return ex;
	}

}


<!-- jackson2 坐标 -->
<dependency>
	<groupId>com.fasterxml.jackson.jaxrs</groupId>
	<artifactId>jackson-jaxrs-xml-provider</artifactId>
	<version>2.2.2</version>
</dependency>
分享到:
评论

相关推荐

    SpringMVC杂记(五) JSR303数据验证

    在本篇《SpringMVC杂记(五) JSR303数据验证》中,我们将深入探讨SpringMVC框架如何集成并使用JSR303(JavaBeans Validation)来进行数据验证,这是一种强大的验证机制,可以确保应用程序接收到的数据是合法且符合...

    ( SpringMVC 数据的格式化、JSR 303数据校验和国际化 实例.zip

    SpringMVC 数据的格式化、JSR 303数据校验和国际化 实例.zip 对应博客:http://blog.csdn.net/peng_hong_fu/article/details/53559773

    springmvc_jsr303

    项目中所需的jar包在压缩包中已提供,项目中用到了JSR303和hibernate-validator的技术,大量采用了注解@NotNull,@Email,@Length,@Max,@Pattern,@Size等,此外还采用了自定义注解,验证信息全部配置在属性文件中.

    学生管理系统SpringMVC+Mybatis+Ajax

    四、Ajax与SpringMVC、Mybatis的集成 在SpringMVC中,可以通过jQuery库或者原生JavaScript来实现Ajax请求。这些请求通常会触发由SpringMVC控制器处理的特定端点。控制器再调用Mybatis的Mapper接口,执行数据库操作...

    SpringMVC JSR303数据校验DEMO(附:JSR303的JAR包)

    当用户提交数据时,SpringMVC会自动调用JSR303验证器,如果输入不符合预设规则,系统将抛出异常并返回错误信息。 JSR303的JAR包通常包含了核心验证API(javax.validation.*)和实现,如Hibernate Validator,它是...

    【源码】SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证

    这是我的这篇博文的源码:SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证,博文地址:http://blog.csdn.net/jadyer/article/details/7574668

    springmvc&JSR303;的jar包

    Spring MVC 和 JSR303 是Java开发中两个重要的组件,它们在构建高效、健壮的Web应用程序中扮演着关键角色。Spring MVC是Spring框架的一部分,用于构建MVC(Model-View-Controller)架构的Web应用,而JSR303(Java ...

    springmvc利用jquery实现ajax的例子

    在本示例中,我们将探讨如何使用Spring MVC框架与jQuery库结合实现Ajax功能。Spring MVC是Spring框架的一部分,专门用于构建Web应用程序,而jQuery则是一个强大的JavaScript库,简化了DOM操作、事件处理以及异步HTTP...

    springmvc接收ajax请求注意事项

    SpringMVC 接收 Ajax 请求注意事项 SpringMVC 框架在处理 Ajax 请求时需要注意一些重要的配置和设置,以确保请求的正确处理和数据的正确传输。下面我们将介绍在 SpringMVC 中接收 Ajax 请求的注意事项。 基本数据...

    JSR303jar包 使用的是Hibernate

    JSR303,全称为Java Specification Request 303,是Java Community Process(JCP)提出的一个关于数据验证的标准,旨在提供一种统一的、跨框架的数据验证机制。该标准定义了验证API,使得开发者可以在应用程序中方便...

    jsr303jar包.zip

    JSR303用到的jar包,本人使用的,现分享给大家,希望能给大家带来帮助 classmate-0.8.0.jar hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar jboss-logging-3.1.1...

    Springmvc+maven+ajax+jquery+json+mybatis登录增删改查详细注释

    Springmvc+maven+ajax+jquery+json+mybatis做的登录,注册,增删改查详细注释,大家可以来一下,看看对自己有没有帮助哈,这是我自己一点点的打的,采用MyEclipse 10运行出来.并且付有sql脚本.可直接导入运行.并且经本人...

    maven+springmvc+mybatis+ajax实现增删查改和登录

    在IT行业中,构建Web应用程序是一项常见的任务,而"Maven+SpringMVC+MyBatis+Ajax"是一个流行的技术栈,用于高效、灵活地开发具备增删查改(CRUD)功能和用户登录验证的应用。本项目是基于IntelliJ IDEA这个强大的...

    spring_mvc_ajax.zip_SpringMVC ajax_SpringMVC+ajax_spring ajax_sp

    在IT领域,SpringMVC和Ajax是两个非常关键的技术组件,它们在构建高效、动态的Web应用程序中扮演着重要角色。本压缩包“spring_mvc_ajax.zip”包含了关于如何结合SpringMVC框架与Ajax技术来实现异步请求的示例和资源...

    springMVC jQuery ajax交互

    SpringMVC是Spring框架的一部分,用于构建高效、灵活的后端控制器,而jQuery则是一个强大的JavaScript库,简化了前端的DOM操作、事件处理以及Ajax交互。本文将深入探讨SpringMVC与jQuery结合使用时的Ajax交互。 ...

    SpringMVC+Ajax异步上传图片并显示(源码)

    总的来说,SpringMVC结合Ajax提供了一种强大的方式来实现异步图片上传功能,它可以大大提高Web应用的交互性和用户体验。在压缩包`spring_ajax_photo`中,可能包含了实现这一功能的完整源代码,包括前端HTML、CSS、...

    SpringMVC+ajax jar

    在IT行业中,SpringMVC和Ajax是两个非常重要的技术组件,它们在开发高效、动态的Web应用程序中扮演着关键角色。结合"jar"标签,我们可以理解这个压缩包可能包含与这些技术相关的Java库。让我们详细探讨一下这两个...

    SpringMVC框架下使用jQueryAJAX进行数据交互

    在现代Web应用开发中,SpringMVC框架与jQuery AJAX的结合使用是常见且高效的数据交互方式。本示例将深入探讨如何在SpringMVC环境中利用jQuery的AJAX功能实现动态、无刷新的数据交换。 首先,SpringMVC是Spring框架...

    SpringMVC使用JSR-303进行验证Bean.docx

    SpringMVC框架结合JSR-303(也称为JSR-349,Java Bean Validation)规范提供了一种优雅的方式来处理数据验证。本篇文章将详细介绍如何在SpringMVC中使用JSR-303进行Bean验证。 首先,我们需要引入JSR-303的实现库。...

    springmvc + jquery + ajax + json 异步传递数据

    SpringMVC、jQuery、Ajax和JSON这四个技术的结合,为开发者提供了一种高效且灵活的方式来实现这一功能。接下来,我们将深入探讨这些技术以及它们如何协同工作。 SpringMVC是Spring框架的一部分,是一个强大的MVC...

Global site tag (gtag.js) - Google Analytics