美文网首页
SpringBoot实战系列之序列化问题(No serializ

SpringBoot实战系列之序列化问题(No serializ

作者: 程序员小白成长记 | 来源:发表于2020-05-27 21:54 被阅读0次

Spring MVC 解决 Could not write JSON: No serializer found for class java.lang.Object
意思是没有找到可用于Object的序列化器,也没有找到属性去创建BeanSerializer。
后面的接着提示了解决方法:(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

{
    "success": false,
    "message": "Could not write JSON: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: com.xxx.xxx.kbase.common.ResultResponse[\"data\"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: com.xxx.xxx.kbase.common.ResultResponse[\"data\"])"
}
问题是返回实体的data参数中返回了new Object()


controller如下:
@ResponseBody
@RequestMapping(value = "/doc", method = RequestMethod.PUT)
public ResultResponse addDocument(@RequestBody @Valid DocContent docContent) {
    ResultResponse resultResponse = new ResultResponse();
    esService.addDocument(docContent);
    resultResponse.setSuccess(true);
    resultResponse.setMessage("ok");
    resultResponse.setData(new Object());
    return resultResponse;
}

SpringMVC 默认是使用的Jackson序列化

两种解决办法
1,设置Jackson,关掉FAIL_ON_EMPTY_BEANS

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Bean;

import org.springframework.stereotype.Component;

@Component
public class ObjectMapperConfiguration {
    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    }
}

2,设置默认序列化为fastjson

//  设置序列化为fastjson
// @Bean
// 使用@Bean注入fastJsonHttpMessageConvert
public HttpMessageConverters fastJsonHttpMessageConverters() {
    // 1.需要定义一个Convert转换消息的对象
    FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
    // 2.添加fastjson的配置信息,比如是否要格式化返回的json数据
    FastJsonConfig fastJsonConfig = new FastJsonConfig();
    fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
    // 3.在convert中添加配置信息
    fastConverter.setFastJsonConfig(fastJsonConfig);
    HttpMessageConverter<?> converter = fastConverter;
    return new HttpMessageConverters(converter);
}

参考:
十七、springboot配置FastJson为Spring Boot默认JSON解析框架(设置默认序列化为fastjson)
关闭spring boot jackson的FAIL_ON_EMPTY_BEANS(设置Jackson)

相关文章

网友评论

      本文标题:SpringBoot实战系列之序列化问题(No serializ

      本文链接:https://www.haomeiwen.com/subject/vrigahtx.html