实现SpringMVC中使用@Responsebody注解返回任意POJO对象转换成JSON
2017-06-29 21:55
931 查看
最近去实习,在第三天老大终于给个项目源码来学习学习了,很难得,然后在阅读源码过程中,发现了很多值得学习的东西,比如一些规范、面向对象设计、框架使用等。
以前以为SpringMVC中使用@Responsebody注解后,只能返回JSONObject,今天让我学到很多东西,原来只要是对象都能返回,只是我们需要把对象转换成JSON类型的字符串。
上述jar包核心作用是把java对象转换成json字符串。
上面定义的这个user类,使用ObjectMapper.writeValueAsString(user)方法转换会返回一个json字符串,例如:{“user_name”:”xyh”,”age”:22}
ObjectMapper类在maven配置的依赖jar包中。
好了,看到这里估计很多人都会有点猜测是怎么做到返回任意对象转换成json写到响应体了。
object是我们mvc的controller返回的对象,
outputMessage对象的getBody ()方法可以获取到Response体的输出流对象。
还有就是,如果有需要的朋友,可以在在这里给json字符串加密,这样就能实现加密传输了,当然了,现在有https。
到这里还差最后一步,配置MVC注解驱动,配置上面我们自定义的转换器
大功告成!!!!
以前以为SpringMVC中使用@Responsebody注解后,只能返回JSONObject,今天让我学到很多东西,原来只要是对象都能返回,只是我们需要把对象转换成JSON类型的字符串。
一、核心依赖jar包:
我这里使用的是maven,so附上maven依赖配置。<properties> <jackson.version>2.7.3</jackson.version> </properties> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency>
上述jar包核心作用是把java对象转换成json字符串。
二、自定义java对象
@JsonInclude(JsonInclude.Include.NON_NULL)//不包含有null值的字段,即字段值为null的转换为json字符串时会被省略 public class User{ @JsonProperty("user_name")//设置该字段转换为json后的字段名 private String name; private int age; public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } }
上面定义的这个user类,使用ObjectMapper.writeValueAsString(user)方法转换会返回一个json字符串,例如:{“user_name”:”xyh”,”age”:22}
ObjectMapper类在maven配置的依赖jar包中。
好了,看到这里估计很多人都会有点猜测是怎么做到返回任意对象转换成json写到响应体了。
三、自定义HttpMessageConverter继承MappingJackson2HttpMessageConverter
很多做过在SpringMVC的朋友应该都知道需要配置MessageConverter,我们这里由于是返回任意POJO对象,so我们需要继承MappingJackson2HttpMessageConverter重写writeInternal方法,例:public class MyHttpMessageConverter implements MappingJackson2HttpMessageConverter{ @Override protected void writeInternal (Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { // 使用 Jackson 的 ObjectMapper 将 Java 对象转换成 Json String ObjectMapper mapper = new ObjectMapper (); String json = mapper.writeValueAsString (object); outputMessage.getBody().write (json.getBytes ()); } };
object是我们mvc的controller返回的对象,
outputMessage对象的getBody ()方法可以获取到Response体的输出流对象。
还有就是,如果有需要的朋友,可以在在这里给json字符串加密,这样就能实现加密传输了,当然了,现在有https。
到这里还差最后一步,配置MVC注解驱动,配置上面我们自定义的转换器
<mvc:annotation-driven > <mvc:message-converter register-defaults="true"> <bean class="com.xyh.converter.MyHttpMessageConverter"/> </mvc:message-converter> </mvc:annotation-driven>
大功告成!!!!
相关文章推荐
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)
- SpringMVC4使用@ResponseBody注解实现JSON自动转换错误
- 使用springMVC注解@ResponseBody与jackson工具类在ajax请求中实现对象与json之间的相互转化
- SpringMVC使用@ResponseBody注解来实现对象序列化成JSON字符串
- 使用springMVC注解@ResponseBody与jackson工具类在ajax请求中实现对象与json之间的相互转化
- springmvc4整合AJAX使用@ResponseBody注解返回JSON数据格式
- 修改零配置的SpringMVC中使用@ResponseBody注解返回json的时间格式
- SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面