springmvc----数据格式化和JSR303数据校验----笔记

首先说发生的问题:
https://blog.csdn.net/qq_27617675/article/details/82852113
因为测试用例是之前的代码,在自定义转换器的时候

	<!-- 给容器注入类型转换服务工厂Bean 在属性中添加自定义的转换器 -->
	<bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<ref bean="testConver"/>
			</set>
		</property>
	</bean>

这个转换服务工厂Bean的类型用ConversionServiceFactoryBean会导致自定义的转换器和原生的 @DateTimeFormat注解背后的转换器有冲突,所以Class类型换成org.springframework.format.support.FormattingConversionServiceFactoryBean
即可解决问题,既可以使用自定义的转换器也可以使用自带的。

数据格式化----测试@NumberFormat和@DateTimeFormat注解

测试bean

package top.demo.crud.bean;

import java.util.Date;

import org.hibernate.validator.constraints.Email;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;

public class TestData {
	
	@NumberFormat(pattern="###,###.###")
	public float salary;
	
	@DateTimeFormat(pattern="yyyy-MM-dd")
	public Date birthday;

	@Override
	public String toString() {
		return "TestData [salary=" + salary + ", birthday=" + birthday + ", email=" + email + ", num=" + num
				+ ", description=" + description + "]";
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String email;
	
	public int num;
	public String description;
	
	public TestData()
	{
		
	}

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}

测试用到的jsp页面
其中form:errors标签在转换失败时会显示错误信息

<%@page import="top.demo.crud.bean.TestData"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>


	<form:form action="testdata" method="POST" modelAttribute="testData">
		Salary:<form:input path="salary"/><form:errors path="salary"></form:errors>
		<br>
		Birthday:<form:input path="birthday"/><form:errors path="birthday"></form:errors>		<br>
		Email:<form:input path="email"/><form:errors path="email"></form:errors>		<br>
		<input type="submit"/>
	</form:form>



</body>
</html>

控制器方法增加了两个

	@RequestMapping("/testFormatPage")
	public String TestFormat(Map<String, Object> map)
	{
		map.put("testData", new TestData());
		return "testFormat";
	}
	
	@RequestMapping("/testdata")
	public String TestDataControl(TestData testData,BindingResult bindingResult) {
		
		System.out.println(testData);
		
		if(bindingResult.getErrorCount()>0)
		{
			List<ObjectError> errors=bindingResult.getAllErrors();
			
			for(ObjectError error:errors)
			{
				System.out.println(error.getObjectName()+":"+error.getDefaultMessage());
			}
		}
		return "testFormat";
	}

输入
在这里插入图片描述

结果
在这里插入图片描述

输入
在这里插入图片描述

结果
在这里插入图片描述

JSR303数据校验

首先导入hibernate-validator包 其实现了JSR303标准
在这里插入图片描述
在这里插入图片描述
把javax-el的包放在tomcat lib下

有辣么多注解可用
在这里插入图片描述

在Bean上增加注解

	@Email
	public String email;
	@NotNull
	public String description;
	

在jsp页面增加相应input

且在控制器方法上增加注解@Valid

	@RequestMapping("/testdata")
	public String TestDataControl(@Valid TestData testData,BindingResult bindingResult) {
		
		System.out.println(testData);
		
		if(bindingResult.getErrorCount()>0)
		{
			List<ObjectError> errors=bindingResult.getAllErrors();
			
			for(ObjectError error:errors)
			{
				System.out.println(error.getObjectName()+":"+error.getDefaultMessage());
			}
		}
		return "testFormat";
	}

输入和结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值