1.使用@ResponseBody实现数据输出
注意:在使用@ResponseBody注解时要引入fastjson-1.2.13.jar这个包
1.controller层代码实现:
//验证userCode是否存在
@RequestMapping("/checkUserCode")
@ResponseBody //等同于out.print()
public String chekcUserCode(String userCode){
HashMap<String,Object> hashMap=new HashMap<String,Object>();
User user=userService.getUserByCode(userCode);
if(user==null){
//可以使用
hashMap.put("userCode","notexist");
}else{
//已存在
hashMap.put("userCode","exist");
}
return JSON.toJSONString(hashMap);
}
2.视图层代码实现:
/*
* 验证
* 失焦\获焦
* jquery的方法传递
*/
userCode.bind("blur",function(){
//ajax后台验证--userCode是否已存在
//user.do?method=ucexist&userCode=**
$.ajax({
type:"GET",//请求类型
url:path+"/checkUserCode",//请求的url
data:{method:"ucexist",userCode:userCode.val()},//请求参数
dataType:"json",//ajax接口(请求url)返回的数据类型
success:function(data){//data:返回数据(json对象)
if(data.userCode == "exist"){//账号已存在,错误提示
validateTip(userCode.next(),{"color":"red"},imgNo+ " 该用户账号已存在",false);
}else{//账号可用,正确提示
validateTip(userCode.next(),{"color":"green"},imgYes+" 该账号可以使用",true);
}
},
error:function(data){//当访问时候,404,500 等非200的错误状态码
validateTip(userCode.next(),{"color":"red"},imgNo+" 您访问的页面不存在",false);
}
});
}).bind("focus",function(){
//显示友情提示
validateTip(userCode.next(),{"color":"#666666"},"* 用户编码是您登录系统的账号",false);
}).focus();
3.解决JSON中文乱码问题:
方式1:controller层:在@requestMapping参数里面添加:produces = {“application/json;charset=utf-8”}即可,注意使用这种方式只能单个实现
@RequestMapping(value = "/userview",produces = {"application/json;charset=utf-8"})/*,produces = {"application/json;charset=utf-8"}*/
@ResponseBody
public Object viewUser(Integer id){
//根据ID查询用户信息
User user=userService.getUserById(id);
if(user==null){
return "nodata";
}
return JSON.toJSONString(user);
}
方式2:配置全局设计编码格式:优势:不需要一个个去配置
<!--启用SpringMVC注解-->
<mvc:annotation-driven >
<mvc:message-converters>
<!--解决JSON格式数据中文乱码-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
4.解决JSON数据传递的日期格式问题:@JSONField
方式1:User实体类:
public class User {
@JSONField(format = "yyyy-MM-dd")
private Date birthday;
}
缺点:该解决方案的代码具有强侵入性,紧耦合,并且修改麻烦,在实际开发,不建议采用这种硬编码的方式来处理;
方式2:配置FastJson的消息转换器:
注意:使用消息转换器它的格式是yyyy-MM-dd HH:mm:ss,在使用中使用注解优先于配置的消息转换器
<!--conversion-service:指定要启用的转换器-->
<mvc:annotation-driven ><!--conversion-service="myConversionService"-->
<mvc:message-converters>
<!--解决JSON格式数据中文乱码-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!--解决日期格式问题-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="features">
<list>
<!-- Date的日期转换器 -->
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
2.使用@InitBinder装配自定义转换器
第一步:注册日期转换器
public class BaseController {
@InitBinder
public void initBinder(WebDataBinder dataBinder){
System.out.println("=================initBinder=====================");
dataBinder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));//true表示允许为空
}
}
第二步:继承有注册转换器的BaseController
@Controller
public class UserController extends BaseController {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@RequestMapping("/main.html")
public String toMain(){
return "frame";
}
}