springmvc 用fasterxml.jackson返回son数据

Spring MVC JSON响应配置
本文介绍如何在Spring MVC中配置Jackson来实现JSON数据的正确响应。通过引入FasterXML Jackson包并配置Spring-servlet.xml文件,使控制器能够返回JSON格式的数据。示例展示了如何设置HTTP消息转换器及创建返回JSON数据的控制器。

一,引入fasterxm.jackson包

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.3</version>
</dependency>
二,配置spring-servlet.xml

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

        <property name="messageConverters">

            <list>

                <ref bean="mappingJackson2HttpMessageConverter" />

            </list>

        </property>

    </bean>

    <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

        <property name="supportedMediaTypes">

            <list>

                <value>text/html;charset=UTF-8</value>

                <value>text/json;charset=UTF-8</value>

                <value>application/json;charset=UTF-8</value>

            </list>

        </property>

    </bean>

三,后台controller类,使用@ReponseBody关键字可以将结果(一个包含字符串和JavaBean的Map),转换成JSON

@Controller  

@RequestMapping("/user")  

public class DemoController {  

  @RequestMapping(value = "/list", method = RequestMethod.GET)  

  @ResponseBody  

  public Map<String, Object> getUserList() {  

    logger.info("列表");  

    List<UserModel> list = new ArrayList<UserModel>();  

    UserModel um = new UserModel();  

    um.setId("1");  

    um.setUsername("sss");  

    um.setAge(222);  

    list.add(um);  

    Map<String, Object> modelMap = new HashMap<String, Object>(3);  

    modelMap.put("total", "1");  

    modelMap.put("data", list);  

    modelMap.put("success", "true");  

    return modelMap;  

  }  

}  

package com.kucun.data.entity.DTO; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.BeanSerializer; import com.fasterxml.jackson.databind.util.NameTransformer; import java.io.IOException; public class FullEntitySerializer extends JsonSerializer<Object> { private final JsonSerializer<Object> defaultSerializer; public FullEntitySerializer(JsonSerializer<Object> defaultSerializer) { this.defaultSerializer = defaultSerializer; } @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException { // 默认完整序列化 defaultSerializer.serialize(value, gen, provider); } // 用于处理嵌套序列化 @Override public JsonSerializer<Object> unwrappingSerializer(NameTransformer unwrapper) { return new FullEntitySerializer(defaultSerializer.unwrappingSerializer(unwrapper)); } }ibernate: select user0_.id as id1_9_, user0_.andy as andy2_9_, user0_.name as name3_9_, user0_.pass as pass4_9_, user0_.role as role5_9_ from user user0_ com.fasterxml.jackson.databind.JsonMappingException: Class com.kucun.data.entity.DTO.FullEntitySerializer has no default (no arg) constructor (through reference chain: java.util.HashMap["bancais"]->java.util.ArrayList[0]->com.kucun.data.entity.Bancai$HibernateProxy$q0bc7nh6["kucun"]) at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:295) at com.fasterxml.jackson.databind.SerializerProvider.reportMappingProblem(SerializerProvider.java:1309) at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1427) at com.fasterxml.jackson.databind.SerializerProvider.findPrimaryPropertySerializer(SerializerProvider.java:682) at com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap.findAndAddPrimarySerializer(PropertySerializerMap.java:64) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._findAndAddDynamic(BeanPropertyWriter.java:898) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:706) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:755) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:726) at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:681)
06-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值