JPA、ジャクソン、JAX-RSは次のように使用しています。Jacksonを@GeneratedValueフィールドに書き込まないようにするにはどうすればいいですか?
マイエンティティ:それは自動生成されているため
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue
private long id;
private String name;
private int age;
public long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
このクラスはid
のためのセッターを持っていません。私がセッターを置いても、違いはありません。ジャクソンがそれを必要とするなら、私はそれを持っていても構いませんが、とにかく使用すべきではありません。 inputPerson
は自動id
、独自に生成している必要があり、それ自身は無視されなければならないid
とperson
が付属していることを
import java.io.IOException;
import javax.inject.Inject;
import javax.json.JsonObject;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.codehaus.jackson.map.ObjectMapper;
import com.test.persons.entity.Person;
@Path("persons")
public class PersonResource {
@Inject
PersonService service;
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response save(JsonObject inputPerson) {
ObjectMapper mapper = new ObjectMapper();
Person person = null;
try {
person = mapper.readValue(inputPerson.toString(), Person.class);
} catch (IOException e) {
e.printStackTrace();
}
service.save(person); // calls @PersistenceContext EntityManager#persist(person)
return Response.ok(person).build();
}
}
問題がある:
この
はリソースです。しかし、Jacksonはid
を
inputPerson
から使用しています(
@Id
が間違っているため)JPAレイヤーで例外が発生します。
Person
のプロパティとのプロパティを持つPerson
オブジェクトを作成し、その自動生成IDを使用してオブジェクトを作成します。それをどうすれば実現できますか?私は私がid
が必要なのです
String s = mapper.writeValueAsString(person);
でJSON String
からPerson
をシリアライズ
注意が直列化されます。デシリアライズされません。
しかし、JSON形式にPersonを書き込むと無視されますか?私は最後にメモを付けました。 – Mark
はい、あなたは@JsonProperty(アクセス= Access.READ_ONLY) – AntonBerezin
を使用することができます私は、Eclipseのエラーを取得しています: 'この行に複数マーカー \t -The属性アクセスは注釈型 \tのために定義されていませんJsonProperty \t -WRITE_ONLY解決できないか、フィールドではありません。バージョンが古いのかもしれませんか?どうすれば確認できますか?私はWildfly 10.1を使用しています。 – Mark