私はこれをdropwizard exampleとして使用しようとしています。私は、適切なゲッターとセッターを加え、そして方法に等しく入力ストリームからエンティティを読み取るときにエラーが発生しました。Dropwizardの例
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "fullName", nullable = false)
private String fullName;
@Column(name = "jobTitle", nullable = false)
private String jobTitle;
@Column(name = "userName", nullable = false)
private String userName;
public Person() {
}
public Person(String fullName, String jobTitle, String userName) {
this.fullName = fullName;
this.jobTitle = jobTitle;
this.userName = userName;
}
以下のようPerson.javaにpeople
表に列userName
を追加しようとしました。
しかし、このブロックの入力ストリームからエンティティを読み取る際にエラーが発生します。
@Test
public void testPostPerson() throws Exception {
final Person person = new Person("Dr. IntegrationTest", "Chief Wizard", "Dr. Wizard");
final Person newPerson = RULE.client().target("http://localhost:" + RULE.getLocalPort() + "/people")
.request()
.post(Entity.entity(person, MediaType.APPLICATION_JSON_TYPE))
--> .readEntity(Person.class);
assertThat(newPerson.getId()).isNotNull();
assertThat(newPerson.getFullName()).isEqualTo(person.getFullName());
assertThat(newPerson.getJobTitle()).isEqualTo(person.getJobTitle());
assertThat(newPerson.getUserName()).isEqualTo(person.getUserName());
}
入力ストリームのエラーは、次
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "code" (class com.example.helloworld.core.Person), not marked as ignorable (4 known properties: "fullName", "id", "userName", "jobTitle"])
クラスレベルで@JsonIgnoreProperties
注釈はこの問題を解決することによって引き起こされますか?この安全な練習ですか?
EDIT:PersonResource.java
@Path("/people/{personId}")
@Produces(MediaType.APPLICATION_JSON)
public class PersonResource {
private final PersonDAO peopleDAO;
public PersonResource(PersonDAO peopleDAO) {
this.peopleDAO = peopleDAO;
}
@GET
@UnitOfWork
public Person getPerson(@PathParam("personId") LongParam personId) {
return findSafely(personId.get());
}
@GET
@Path("/view_freemarker")
@UnitOfWork
@Produces(MediaType.TEXT_HTML)
public PersonView getPersonViewFreemarker(@PathParam("personId") LongParam personId) {
return new PersonView(PersonView.Template.FREEMARKER, findSafely(personId.get()));
}
@GET
@Path("/view_mustache")
@UnitOfWork
@Produces(MediaType.TEXT_HTML)
public PersonView getPersonViewMustache(@PathParam("personId") LongParam personId) {
return new PersonView(PersonView.Template.MUSTACHE, findSafely(personId.get()));
}
private Person findSafely(long personId) {
return peopleDAO.findById(personId).orElseThrow(() -> new NotFoundException("No such user."));
}
あなたのリソースメソッドを引用できますか?要求がPersonオブジェクトではなく無効な応答を受け取っているようです。 –
updated @CanBican – DJ2