我正在以以下方式使用JPA、Jackson和JAX-RS。
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
的setter,因为它是自动生成的。即使我把二传手也没有区别。如果杰克逊需要的话,我不介意拥有它,但无论如何,它不应该被使用。
这是资源:
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();
}
}
问题是,inputPerson
带有自己的ID
,它应该被忽略,Person
应该自动生成自己的ID
。但是Jackson使用了inputPerson
中的id
,这会在JPA层中导致异常(因为@id
是错误的)。
String s = mapper.writeValueAsString(person);
我确实需要id
来序列化。只是没有反序列化。
您可以用@JsonIgnore
注释标记字段id
,这样Jackson Json将完全忽略该字段。
UPD.如果希望在反序列化对象时忽略该字段,但在序列化对象时使用该字段,@jsonproperty(access=access.read_only)
可能会很有用。或者您可以尝试使用@jsonignore.
注释setter
我已经尝试创建自定义序列化程序,但我无法在那里获得字段名。 在GSON中,我使用了,但Jackson没有这样的功能。有对等的吗?
我正在尝试将数据框中的几个字段写入 JSON。数据框中的数据结构是 现在,我正试图将col1到col4字段转换为JSON,并为JSON字段命名 预期产出 我为此写了一个udf。 这就是我的结果 如您所见,它们没有分组。是否有使用UDF本身对这些行进行分组的方法。我是scala/Spark的新手,无法找到合适的udf。
问题内容: 我不清楚杰克逊如何处理映射字段中的大写字母。如果有人可以帮忙,我将不胜感激。 上面是我的json,下面是我的例外… 上面是我的例外,下面是我的课… …等等 问题答案: 由于您的设置方法命名为Jackson,因此假设变量的命名是基于Java的 命名约定 (变量应以小写字母开头)。 如果您真的想要一个大写字母,请使用 setter 上的 @JsonProperty 注释(或-进行序列化-在
我不清楚jackson是如何处理映射字段中的大写字母的。如果有人能帮忙,我将不胜感激。 上面是我的json,下面是我的例外。。。 上面是我的例外,下面是我的班级。。。 ... 等等
知道如何根据Jackson的ObjectMapper对象和特定的Class检索给定json路径的Java类型吗? 假设我们有 Jackson的ObjectMapper我想找到一种方法,将字符串值反序列化到给定路径上由字段表示的类型的对象(或至少获取其类型),例如。 给定“/accountOwner/age”和“25”得到25(整数类型) 给定“/accountOwner/active”和“true
我使用像: