【问题标题】:org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSONorg.springframework.http.converter.HttpMessageNotWritableException:无法写入 JSON
【发布时间】:2014-07-17 13:33:25
【问题描述】:

org.springframework.http.converter.HttpMessageNotWritableException: 无法写入 JSON:(是 java.lang.NullPointerException)(通过 参考链:in.xyz.sync.dto.ClassRoom["id"]);嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: (是 java.lang.NullPointerException) (通过引用链: in.xyz.sync.dto.ClassRoom["id"])

import java.util.List;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.map.annotate.JsonSerialize;

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ClassRoom extends CommonResponse {

    private long classId;
    private String clientClassRoomId;
    private long instituteId;
    private long teacherId;
    private String className;
    private long handleId;
    private int archived;
    private int deleted;
    private String creationTime;
    private String modifiedTime;
    private int type;
    private String classCode;
    private List<Student> student;
    private String handle;
    private String firstName;


}

【问题讨论】:

    标签: spring resttemplate


    【解决方案1】:

    在 ClassRoom 类中从原语(int 和 long)切换到 Java 类(Int 和 Long)可能会有更好的结果。见JsonMappingException (was java.lang.NullPointerException)

    您还可以通过将@NotNull (javax.validation.constraints.NotNull) 分配给所有字段来确定哪个字段为空。如果遇到空值,@NotNull 注释将导致运行时异常。然后,将@NotNull注解一一注释掉,直到异常消失,您就会找到罪魁祸首(或者如果有多个,至少是其中的第一个)。

    【讨论】:

      【解决方案2】:
      @GetMapping("/findAll")
      @ResponseBody   
      public Iterable<Customer> findAllCustomers() {
      
       return  repository.findAll();
      }                               
      

      当我尝试这样做时,我遇到了同样的异常

      之后,我尝试迭代并添加到列表中,然后返回该列表,这样我的问题就解决了。

      试试这个!

      @GetMapping("/findAll")
      @ResponseBody   
      public List<Customer> findAllCustomers() {
          List<Customer> customers = new ArrayList<>();
          Iterable<Customer> customersAll = repository.findAll();
          for (Customer customer : customersAll) {
              customers.add(customer);
          }
       return customers;
      }
      

      【讨论】:

        【解决方案3】:

        就我而言,我只需要将 int 替换为 Integer:

        例如:

        private int idtask; => private Integer idtask;
        

        对 getter 和 setter 做同样的事情。

        public Integer getIdlayer() {
                return idlayer;
            }
        
        public void setIdlayer(Integer idlayer) {
            this.idlayer = idlayer;
        }
        

        这解决了我的问题。 基本上我遇到了这个问题,因为此列中有一个空值。 使用:Spring Boot + PostgreSQL

        注意:Dave McLure 的回答也是解决方案。

        【讨论】:

          【解决方案4】:

          我花了一整天的时间来修复这样的错误。就我而言,我有那个 Nullpointer,因为我有一个序列化程序,它有一个没有实例化的依赖项,并且原始异常的上下文已经消失了! :'( 所以它的信息不够表达。 我不得不调试很多次,直到我发现我的 Bean 没有正确实例化。它与 Spring MockMvc 有关(我必须做一个解决方法,我的意思是,停止使用这个模拟。仍然期待让它工作) 在我的情况下,找到我的课程之前的最后一个外部库方法是:com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov)

          在这里,最后一个外部类,我从那里得到 NullPointerException。所以我的建议是追踪 NullPointerException,直到找到确切的行。这可能会告诉你发生了什么。

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-06-20
            • 2016-08-27
            • 2021-08-03
            • 1970-01-01
            • 1970-01-01
            • 2021-02-19
            • 2020-05-13
            • 2019-05-29
            相关资源
            最近更新 更多