【问题标题】:InvalidDefinitionException: No serializer found for inner classInvalidDefinitionException:找不到内部类的序列化程序
【发布时间】:2019-08-04 13:24:18
【问题描述】:

我有这门课,我想以JSON 格式返回RestAPI 调用

return ResponseEntity.ok().cacheControl(CacheControl.maxAge(5, TimeUnit.MINUTES))
                    .body(hotelChart2);

类:

public class HotelChart2 {



    public HotelChart2() {
        super();
    }

    public class Statistics {

         double min;
         double max;
         double average;

         public Statistics() {
            super();
         }

        public Statistics(double min, double max, double average) {
            super();
            this.min = min;
            this.max = max;
            this.average = average;
        }

    }

    Map<LocalDateTime, DoubleSummaryStatistics> las24HPerHour;

    Map<LocalDate, Statistics> last30DPerDay;

    Map<LocalDate, Statistics> last3MPerDay;

    Map<LocalDate, Statistics> last6MPerDay;

    Map<LocalDate, Statistics> last1YPerDay;



    public Map<LocalDateTime, DoubleSummaryStatistics> getLas24HPerHour() {
        return las24HPerHour;
    }

    public void setLas24HPerHour(Map<LocalDateTime, DoubleSummaryStatistics> las24hPerHour) {
        las24HPerHour = las24hPerHour;
    }

    public Map<LocalDate, Statistics> getLast30DPerDay() {
        return last30DPerDay;
    }

    public void setLast30DPerDay(Map<LocalDate, Statistics> last30dPerDay) {
        last30DPerDay = last30dPerDay;
    }

    public Map<LocalDate, Statistics> getLast3MPerDay() {
        return last3MPerDay;
    }

    public void setLast3MPerDay(Map<LocalDate, Statistics> last3mPerDay) {
        last3MPerDay = last3mPerDay;
    }

    public Map<LocalDate, Statistics> getLast6MPerDay() {
        return last6MPerDay;
    }

    public void setLast6MPerDay(Map<LocalDate, Statistics> last6mPerDay) {
        last6MPerDay = last6mPerDay;
    }




    public Map<LocalDate, Statistics> getLast1YPerDay() {
        return last1YPerDay;
    }

    public void setLast1YPerDay(Map<LocalDate, Statistics> last1yPerDay) {
        last1YPerDay = last1yPerDay;
    }


}

但我收到了这个错误:

Type definition error: [simple type, class com.tdk.api.json.HotelChart2$Statistics]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.tdk.api.json.HotelChart2$Statistics and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.tdk.api.json.HotelChart2["last3MPerDay"]->java.util.HashMap["2019-01-27"])
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:293)
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:103)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290)

【问题讨论】:

    标签: java json rest spring-boot jackson


    【解决方案1】:

    这两种解决方案中的任何一种都有效!

    公开所有成员(默认情况下,Jackson 在公共成员字段上工作)

     public double min; //note: members are made public
     public double max;
     public double average;
     public Map<LocalDateTime, DoubleSummaryStatistics> las24HPerHour;
     // ..... modify all map as public
    

    如果要修改 Jackson 默认属性,请修改 ObjectMapper

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setVisibility(mapper.getVisibilityChecker()
                 .withFieldVisibility(JsonAutoDetect.Visibility.ANY));
    

    【讨论】:

      【解决方案2】:

      您需要将getters 添加到您的内部Statistics 类(首选)或在ObjectMapper 级别启用fields 可见性:

      ObjectMapper mapper = new ObjectMapper();
      mapper.setVisibility(mapper.getVisibilityChecker()
           .withFieldVisibility(JsonAutoDetect.Visibility.ANY));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 1970-01-01
        • 2022-09-24
        • 1970-01-01
        • 2021-10-07
        • 2021-03-30
        相关资源
        最近更新 更多