配置spring对json的注解方式。
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <list > <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <!-- 处理JSON数据转换的 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json; charset=UTF-8</value> </list> </property> </bean>
Controller层使用了@requestBody和@responseBody注解
/** * 接受json参数,返回json数据 * @param area * @param request * @param response * @return * @throws Exception */ @ResponseBody @RequestMapping("/getJson") public Map<String, Object> getJson(@RequestBody Area area, HttpServletRequest request,HttpServletResponse response) throws Exception{ Map<String, Object> resultMap = new HashMap<String, Object>(); try { System.out.println(area.getName()); Area entity = areaService.queryById(area.getId()); responseOk(resultMap, entity); } catch (Exception e) { responseError(resultMap, Constant.FAILURE_MESSAGE, e); } return resultMap; }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="/./resources/js/jquery-1.8.3.min.js"></script> <script type="text/javascript"> $(function(){ $(".areajson").click(function(){ var id=$(this).attr("id"); var areaNmae=$(this).attr("areaNmae"); var level=$(this).attr("level"); var json = JSON.stringify({"id":id,"name":areaNmae,"level":level});//发送json数据 jQuery.ajax({ url:"/area/getJson", type:"post", dataType:"json", data:json, contentType:‘application/json;charset=UTF-8‘,//使用@requestBody必须设置contentType为json才能接受到Json数据 success:function(jsondata){ alert(jsondata.result.name); } }) }) }) </script> <title>Insert title here</title> </head> <body> #foreach($obj in $!list) <a href="javascript:;"><span id="$!obj.id" class="areajson" areaNmae="$!obj.name" level="$!obj.level">$!obj.name</span></a> #end </body> </html>
我在这里遇到两个问题:1、用$.ajax({}),使用$一直报错,但是用jQuery就不报错,暂时还不知道原因。2、必须设置contentType,不然会报415错误。
这样就完成spring接受和返回json数据了。很简单的一个例子。
还有一种就是使用printWriter来返回json。
response.setContentType("text/plain"); response.setHeader("Cache-Control", "no-cache"); response.setCharacterEncoding("UTF-8"); try { PrintWriter writer = response.getWriter(); writer.print(Json.toJson(resultMap)); } catch (IOException e) { e.printStackTrace(); }
这里的Json是org.nutz.json.Json;将map转化为json数据。Json.toJson接受的参数是Object。所有也可以是数组、集合、对象。
post提交方式,以上面那种参数提交的话,他的请求体是这样的
如果以这种方式提交参数。
data:{"id":id,"name":areaNmae,"level":level}
可以看看Request Payload。
Json数据现在在APP或者是网站上都非常有用。得到json数据,要具体的数据只要一直.过去就行了。例如a.b.c.d就能获取到d的值。
时间: 2024-11-05 21:59:49