这里我用了三种形式返回 1、String 2、返回对象 3、 返回数组

一、以String方式返回

先看一下JavaScript代码

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
$(function(){
$("input[name=uname]").blur(function(){
var name = $(this).val();
$.ajax({
url:"ajaxC/checkName",
type:"post",
data:"uname="+name,
datatype:"html",
success:function(res){
$("#show").html(res)
}
})
})

$("button[name=bb]").click(function(){
$.ajax({
url:"ajaxC/checkName1",
type:"post",
datatype:"json",
success:function(res){
alert(res.id+"----"+res.name+"----"+res.age)
}
})
})

$("button[name=btn]").click(function(){
var name = $(this).val();
$.ajax({
url:"ajaxC/checkName2",
type:"post",
datatype:"json",
success:function(res){
$(res).each(function(i,u){
alert(u.id+"----"+u.name+"----"+u.age)
})
}
})
})

})
</script>
<body>
用户名:<input name="uname"/><span  id="show"></span><button name="bb" type="button" >获取单个信息</button><button name="btn" type="button" >获取集合信息</button>
</body>
</html>

这里我用Ajax异步请求到后台controller的控制台,第一个Ajax是判断用户名是否合法,第二个Ajax是接收后台传过来的对象数据,第三个是接收后台传过来的集合。
下面请看controller控制台代码
方法体上注解@ResponseBody,返回值类型还可以为Map,Array等。json处理器帮我们构造成JSON格式字符串,减少工作量。


package com.direct.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.direct.entity.UserInfo;

@Controller
@RequestMapping(value="/ajaxC")
public class AjaxController {
@RequestMapping(value="/checkName",method=RequestMethod.POST)
@ResponseBody
private String  checkName(String uname) {
if(uname!=null && uname.matches("[a-zA-Z0-9]{6,}")){
return "<span style='color: green;'>用户名可用</span>";
}
return "<span style='color: red;'>用户名不可用</span>";
}

@RequestMapping(value="/checkName1",method=RequestMethod.POST)
@ResponseBody
private UserInfo  checkName1() {

UserInfo user = new UserInfo(1, "战三", 18, "男");

return user;
}


@RequestMapping(value="/checkName2",method=RequestMethod.POST)
@ResponseBody
private List<UserInfo>  checkName2() {
List<UserInfo> ulist = new ArrayList<>();
ulist.add(new UserInfo(1, "战三", 18, "男"));
ulist.add(new UserInfo(2, "战三2", 16, "男"));
ulist.add(new UserInfo(3, "战三3", 12, "女"));
ulist.add(new UserInfo(4, "战三4", 20, "男"));
return ulist;
}
}


和普通的Ajax异步请求不同的是,SpringMVC不需要采用HttpServletResponse,只需要在方法上面加入注解 @ResponseBody 就可以了,加了之后需要在SpringMCV中配置处理ResponseBody返回编码格式和json转换,下面是处理ResponseBody返回编码格式和json转换的代码:


<!-- 处理ResponseBody返回编码格式 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- SpringMVC的json转换 -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</list>
</property>
</bean>

PS:如果你的SpringMVC中配置的有处理静态资源的话<mvc:annotation-driven/> 需要将你处理ResponseBody返回编码格式的代码放在它的上面,不然还是会中文乱码。


原文链接:https://blog.csdn.net/Rm_and_Rf/article/details/90402912

发表评论

电子邮件地址不会被公开。 必填项已用*标注