org.springframework.http.converter.HttpMessageNotWritableException:无法写入JSON

时间:2014-07-17 13:33:26

标签: spring resttemplate

  

org.springframework.http.converter.HttpMessageNotWritableException:   无法编写JSON :(是java.lang.NullPointerException)(通过   reference chain: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;


}

4 个答案:

答案 0 :(得分:2)

在ClassRoom类中,您可能会有更好的结果从基元(int&amp; long)切换到Java类(Int&amp; Long)。见JsonMappingException (was java.lang.NullPointerException)

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

答案 1 :(得分: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;
}

答案 2 :(得分:1)

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

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

希望它有所帮助。

答案 3 :(得分:0)

在我的情况下,我只需要用Integer替换int:

e.g:

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&#39;答案也是解决方案。