Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson/Jersey将JSON映射到对象时出现NullPointerException_Java_Json_Rest_Jersey_Jackson - Fatal编程技术网

Java 使用Jackson/Jersey将JSON映射到对象时出现NullPointerException

Java 使用Jackson/Jersey将JSON映射到对象时出现NullPointerException,java,json,rest,jersey,jackson,Java,Json,Rest,Jersey,Jackson,我有一个Glassfish服务器,用于Web服务。 我正在发送一个包含JSON的POST请求,并希望Jackson将其映射到JPA实体。 这就是NPE出现的时候 实体: @Entity @XmlRootElement @Table(name = "tracks", schema = "public", catalog = "xtracker") public class Track { @Id @GeneratedValue(strategy = GenerationType.I

我有一个Glassfish服务器,用于Web服务。 我正在发送一个包含JSON的POST请求,并希望Jackson将其映射到JPA实体。 这就是NPE出现的时候

实体:

@Entity
@XmlRootElement
@Table(name = "tracks", schema = "public", catalog = "xtracker")
public class Track {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "track_id", nullable = false, insertable = true, updatable = true)
    private Long trackId;
    @Basic
    @Column(name = "time_start", nullable = true, insertable = true, updatable = true)
    private Timestamp timeStart;
    @Basic
    @Column(name = "time_end", nullable = true, insertable = true, updatable = true)
    private Timestamp timeEnd;
    @OneToMany(mappedBy = "track")
    private List<Jump> jumps = new ArrayList<>();
    @OneToMany(mappedBy = "track", cascade = CascadeType.PERSIST)
    private List<Point> points = new ArrayList<>();
    @ManyToOne
    @JoinColumn(name = "user_id", referencedColumnName = "user_id")
    private User user;
...getters and setters
异常指向track.getTrackId

Jackson工作正常,因为当我尝试用一个字段映射简单的测试对象而没有多个字段关系时,这是正常的

应用程序配置:

@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
        // following code can be used to customize Jersey 2.0 JSON provider:
        try {
            Class jsonProvider = Class.forName("org.glassfish.jersey.jackson.JacksonFeature");
            // Class jsonProvider = Class.forName("org.glassfish.jersey.moxy.json.MoxyJsonFeature");
            // Class jsonProvider = Class.forName("org.glassfish.jersey.jettison.JettisonFeature");
            resources.add(jsonProvider);
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        resources.add(SecurityFilter.class);
        addRestResourceClasses(resources);
        return resources;
    }

    /**
     * Do not modify addRestResourceClasses() method.
     * It is automatically re-generated by NetBeans REST support to populate
     * given list with all resources defined in the project.
     */
    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(RestResource.class);
    }

}
更新: 这是一个来自客户端的JSON示例,我检查了它是否真的到达了Jersey:

{跳跃:[],点:[{pointId:0,速度:0.2}]}

pointId和速度是点字段

更新2:
问题解决了:是RequestFilter清除了一个http实体体,空实体到达了方法。谢谢

在您的示例中是track null还是trackId null?在Jackson生成的NPE警告之前是否打印出任何错误或警告,这些错误或警告可能会带来更清晰的信息?OMG感谢您更新2!我一直在为这件事发愁:
@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
        // following code can be used to customize Jersey 2.0 JSON provider:
        try {
            Class jsonProvider = Class.forName("org.glassfish.jersey.jackson.JacksonFeature");
            // Class jsonProvider = Class.forName("org.glassfish.jersey.moxy.json.MoxyJsonFeature");
            // Class jsonProvider = Class.forName("org.glassfish.jersey.jettison.JettisonFeature");
            resources.add(jsonProvider);
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        resources.add(SecurityFilter.class);
        addRestResourceClasses(resources);
        return resources;
    }

    /**
     * Do not modify addRestResourceClasses() method.
     * It is automatically re-generated by NetBeans REST support to populate
     * given list with all resources defined in the project.
     */
    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(RestResource.class);
    }

}