Java 当我试图通过POST方法创建对象时,为什么会得到NullPointerException?
我一直在编写一些RESTAPI测试,我不知道是我写错了测试,还是我的POST方法无效。 我在执行测试时遇到此错误: 错误[2015-12-14 21:37:00309]org.glassfish.grizzly.servlet.ServletHandler:服务异常: ! java.lang.NullPointerException:null ! 在resources.ActorResource.postActor(ActorResource.java:31)等处 我不知道它是从哪里来的。测试中的Actor对象已正确初始化,所有这些都应该工作正常 以下是post方法:Java 当我试图通过POST方法创建对象时,为什么会得到NullPointerException?,java,jersey,dropwizard,Java,Jersey,Dropwizard,我一直在编写一些RESTAPI测试,我不知道是我写错了测试,还是我的POST方法无效。 我在执行测试时遇到此错误: 错误[2015-12-14 21:37:00309]org.glassfish.grizzly.servlet.ServletHandler:服务异常: ! java.lang.NullPointerException:null ! 在resources.ActorResource.postActor(ActorResource.java:31)等处 我不知道它是从哪里来的。测试中
@POST
@UnitOfWork
public Saying postActor(@HeaderParam("actorName") String name, @HeaderParam("actorBirthDate") String birthDate) {
Actor actor = dao.create(new Actor(name,birthDate));
return new Saying("Added : " + actor.toString());
}
这是我写的测试
@Test
public void postActor() {
when(movieDAO.create(actor)).thenReturn(actor);
final Response response = RULE.getJerseyTest().target("/actors").request().post(Entity.text(""));
assertThat(response.getStatusInfo().getStatusCode()).isEqualTo(Response.Status.OK.getStatusCode());
verify(movieDAO).create(actor);
}
编辑
下面是Actor初始化方法
@Before
public void setup() {
actor = new Actor();
actor.setId(1L);
actor.setBirthDate("12-03-2014");
actor.setName("Karol Marks");
}
演员班
@Entity
@Table(name="Actors")
public class Actor {
private long id;
private String name;
private String birthDate;
private Movie movie;
public Actor() {
}
public Actor(String name, String birthDate) {
this.name = name;
this.birthDate = birthDate;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(name = "name", nullable = false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "birthDate", nullable = false)
public String getBirthDate() {
return birthDate;
}
public void setBirthDate(String birthDate) {
this.birthDate = birthDate;
}
@ManyToOne(cascade = CascadeType.ALL)
public Movie getMovie() {
return movie;
}
public void setMovie(Movie movie) {
this.movie = movie;
}
@Override
public String toString() {
return "Actor{" +
"id=" + id +
", name='" + name + '\'' +
", birthDate='" + birthDate + '\'' +
'}';
}
异常:!java.lang.NullPointerException:null!在resources.ActorResource.postActor(ActorResource.java:31)…etc
表示java源文件第31行ActorResource
中的代码引发了NullPointerException
您将获得一个NullPointerException
,因为您的代码在运行时试图调用对象上的方法,但该对象实际上是null
因为我看不到ActorResource
的行号,所以
- 如果
是Actor=dao.create(新演员(姓名、生日))
的第31行,那么ActorResource
必须是dao
并调用null
导致dao。create(…)
(这意味着NullPointerException
尚未初始化)李>dao
- 否则,如果
是返回新语句(“添加:“+actor.toString()”)
的第31行,那么ActorResource
必须是actor
并且调用null
会导致actor.toString()
(这意味着NullPointerException
返回dao.create(…)
)null
例外:!java.lang.NullPointerException:null!在resources.ActorResource.postActor(ActorResource.java:31)…etc
表示java源文件第31行ActorResource
中的代码引发了NullPointerException
您将获得一个NullPointerException
,因为您的代码在运行时试图调用对象上的方法,但该对象实际上是null
因为我看不到ActorResource
的行号,所以
- 如果
是Actor=dao.create(新演员(姓名、生日))
的第31行,那么ActorResource
必须是dao
并调用null
导致dao。create(…)
(这意味着NullPointerException
尚未初始化)李>dao
- 否则,如果
是返回新语句(“添加:“+actor.toString()”)
的第31行,那么ActorResource
必须是actor
并且调用null
会导致actor.toString()
(这意味着NullPointerException
返回dao.create(…)
)null
参数匹配器,请参见:
或者您必须覆盖等于
,请参见:
合理使用复杂的参数匹配。使用equals()
和偶尔使用anyX()
匹配器的自然匹配风格倾向于提供干净简单的测试。有时,最好重构代码,允许equals()
匹配,甚至实现equals()
方法来帮助测试
您需要一个类似的ArgumentMatcher
,请参见:
或者您必须覆盖等于
,请参见:
合理使用复杂的参数匹配。使用equals()
和偶尔使用anyX()
匹配器的自然匹配风格倾向于提供干净简单的测试。有时,最好重构代码,允许equals()
匹配,甚至实现equals()
方法来帮助测试
我添加了一些参与者详细信息,我填写了“toString()”方法中所需的所有字段,因为它是资源中使用的唯一方法。我添加了一些参与者详细信息,我填写了“toString()”方法中所需的所有字段,因为它是资源31行中使用的唯一方法。isreturn new say(“added:”+actor.toString())代码>行。当(…)
时,处的测试方法有问题吗?然后actor
是null
,这意味着dao。create(…)
返回null
。我建议添加一些日志记录和/或调试您的应用程序,以找出为什么.31行是返回新语句(“添加:“+actor.toString()”)代码>行。当(…)
时,处的测试方法有问题吗?然后actor
是null
,这意味着dao。create(…)
返回null
。我建议添加一些日志记录和/或调试您的应用程序,以找出原因。
when(mock.addAll(argThat(new IsListOfTwoElements()))).thenReturn(true);