Spring MVC返回 json字符串的方式有很多种方法,这里介绍最简单,也是最常使用的两种方式
一、使用 PrintWriter printWriter 直接输出字符串到返回结果中
不需要任何xml文件配置
1
2
3
4
5
6
7
8
9
|
//返回给前台一个字符串
@RequestMapping (params = "method=getJson1" )
public void getJson( @RequestParam ( "userid" ) String userid, @RequestHeader ( "Accept-Encoding" ) String encoding,HttpServletRequest request,PrintWriter printWriter) {
System.out.println( "通过注解在参数中取值 " +userid);
System.out.println( "通过@RequestHeader获得的encoding " +encoding);
printWriter.write( "{key,1}" );
printWriter.flush();
printWriter.close();
}
|
请求地址:http://localhost:8080/springmvc/hello.do?method=getJson1&userid=111
返回值: {key,1}
二、通过@ResponseBody 直接返回对象,Spring MVC会自动把对象转化成Json
需要其他配置支持
1、开启 <mvc:annotation-driven />
2、Jackson library 对应的jar必须加入到工程中
3、方法的返回值必须添加 @ResponseBody
1
2
3
4
5
6
7
8
|
//把返回结果解析成json串返回到前台
@RequestMapping (params = "method=json" )
public @ResponseBody User passValue(HttpServletRequest request) {
User user = new User();
user.setUser( "aaaa" );
user.setPass( "asfd" );
return user;
}
|
请求地址:http://localhost:8080/springmvc/hello.do?method=json
返回值:{"user":"aaaa","pass":"asfd"}
注意:在使用@ResponseBody 返回json的时候,方法参数中一定不能他添加 PrintWriter printWriter
java.lang.IllegalStateException: getWriter() has already been called for this response
例如:
//这个方法会报错 因为使用了PrintWriter printWriter 错误 java.lang.IllegalStateException: getWriter() has already been called for this response
1
2
3
4
5
6
7
|
@RequestMapping (params = "method=jsonTest" )
public @ResponseBody Map<String, Object> jsonTest( @RequestParam ( "userid" ) String userid,HttpServletRequest request,PrintWriter printWriter) {
System.out.println( "通过注解在参数中取值 " +userid);
System.out.println( "通过自己写的函数从reqeust取值 " +RequestUtil.getMap(request).get( "userid" ));
HelloWorld hello = new HelloWorld(RequestUtil.getMap(request));
return hello.hello();
}
|
提醒:注意两种方法不能混用,不然会报错如下:
时间: 2024-10-11 21:54:48