SpringMVC基础-8-JSON与Restful支持
来源:互联网 发布:大华网络摄像机默认ip 编辑:程序博客网 时间:2024/05/16 12:33
2017/12/13更新
通过自定义注解在过滤返回的json字段
https://diamondfsd.com/article/ae89cf4e-f679-4cc0-9882-f02e0240866e
记录一下心得:
HandlerMethodReturnValueHandler 主要是处理返回值用的处理类
我们关注一下handleReturnValue这个方法
mavContainer.setRequestHandled(true); for (int i=0;i<advices.size();i++){ ResponseBodyAdvice<Object> ad = advices.get(i); if (ad.supports(returnType, null)) { returnValue = ad.beforeBodyWrite(returnValue, returnType, MediaType.APPLICATION_JSON_UTF8, null, new ServletServerHttpRequest(webRequest.getNativeRequest(HttpServletRequest.class)), new ServletServerHttpResponse(webRequest.getNativeResponse(HttpServletResponse.class))); } } HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class); Annotation[] annos = returnType.getMethodAnnotations(); CustomerJsonSerializer jsonSerializer = new CustomerJsonSerializer(); Arrays.asList(annos).forEach(a -> { if (a instanceof JSON) { JSON json = (JSON) a; jsonSerializer.filter(json); } else if (a instanceof JSONS) { JSONS jsons = (JSONS) a; Arrays.asList(jsons.value()).forEach(json -> { jsonSerializer.filter(json); }); } }); response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); String json = jsonSerializer.toJson(returnValue); response.getWriter().write(json);
上面不说了,主要是拿到response 和注解开始。
也就是我们这个返回的数据需要用CustomerJsonSerializer这个类处理一下,而这个类构造的时候,用到了JackSonJsonFilter这个类,活的注解之后把字段通过addToMap方法进行了添加
private void addToMap(Map<Class<?>, Set<String>> map, Class<?> type, String[] fields) { Set<String> fieldSet = map.getOrDefault(type, new HashSet<>()); fieldSet.addAll(Arrays.asList(fields)); map.put(type, fieldSet); }
2017/12/07更新
关于返回的json中null转为“”的方法
public class JsonObjectMapper extends ObjectMapper { private static final long serialVersionUID = 1L; public JsonObjectMapper() { super(); // 空值处理为空串 this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() { @Override public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException { jg.writeString(""); } }); }}
在配置文件中进行转换
<mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="jp.co.remmo.common.util.JsonObjectMapper"></bean> </property> </bean></mvc:message-converters>
JSON
1,@RequestBody
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。
List.action?id=1&name=zhangsan&age=12。
@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象
2,@ResponseBody
该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端
本例子应用:
@ResponseBody注解实现将controller方法返回对象转换为json响应给客户端
// 商品修改提交json信息,响应json信息 @RequestMapping("/editItemSubmit_RequestJson") public @ResponseBody Items editItemSubmit_RequestJson(@RequestBody Items items) throws Exception { System.out.println(items); //itemService.saveItem(items); return items; }
RESTful支持
1,定义
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。
- 资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词。没有参数
- Url格式
http://blog.csdn.net/beat_the_world/article/details/45621673 - 资源操作:使用put、delete、post、get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。一般使用时还是post和get。Put和Delete几乎不使用。
2,添加DispatcherServlet的rest配置
<servlet> <servlet-name>springmvc-servlet-rest</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param></servlet><servlet-mapping> <servlet-name>springmvc-servlet-rest</servlet-name> <url-pattern>/</url-pattern></servlet-mapping>
3,URL 模板模式映射
- @RequestMapping(value=”/ viewItems/{id}”):
{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用 - @PathVariable获取{×××}中的×××变量:
@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。
@RequestMapping("/viewItems/{id}") public @ResponseBody viewItems(@PathVariable("id") String id,Model model) throws Exception{ //方法中使用@PathVariable获取useried的值,使用model传回页面 //调用 service查询商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(id); return itemsCustom;}
如果RequestMapping中表示为”/viewItems/{id}”,id和形参名称一致,@PathVariable不用指定名称。
4,静态资源访问”mvc:resources”
如果在DispatcherServlet中设置url-pattern为 /则必须对静态资源进行访问处理。spring mvc 的
mvc:resources mapping="" location=""
实现对静态资源进行映射访问。如下是对js文件访问配置:
<mvc:resources location="/js/" mapping="/js/**"/>
- SpringMVC基础-8-JSON与Restful支持
- springmvc restful 支持
- springmvc restful风格支持
- SpringMVC对RESTful支持
- springmvc-RESTful支持
- springmvc对RESTful支持
- springmvc RESTful支持
- springmvc对RESTful支持
- SpringMVC RESTful Json Example
- springmvc-restful-json
- springmvc对RESTful的支持
- springmvc教程--RESTful支持详解
- SpringMVC的Restful风格支持
- Springmvc学习(09)-RESTful支持
- springMvc + Json整合配置 RESTful
- 【SpringMVC整合MyBatis】springmvc对RESTful支持
- SpringMVC与RESTful
- springmvc支持json
- 多目标跟踪的简单理解
- Cookie的使用细节;Session的概述
- NOIP 2017 时间复杂度
- 关于intern
- 前台开发记录
- SpringMVC基础-8-JSON与Restful支持
- EventBus详细解析
- 多维数组和一维数组的转换
- 开启一个线程,定时刷新窗口
- 文章标题
- JSP基础语法
- Machine Learning 基础概念
- DP(一)HDOJ 1003 Max Sum(java版)
- 一次完整的HTTP请求与响应涉及了哪些知识?