您的位置:首页 > 编程语言 > Java开发

实现SpringMVC中使用@Responsebody注解返回任意POJO对象转换成JSON

2017-06-29 21:55 931 查看
最近去实习,在第三天老大终于给个项目源码来学习学习了,很难得,然后在阅读源码过程中,发现了很多值得学习的东西,比如一些规范、面向对象设计、框架使用等。

以前以为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>


大功告成!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐