- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 Java 类:Usuario 和 Entrada。
乌苏里奥:
@Entity
@Table(name="usuario")
@NamedQuery(name="Usuario.findAll", query="SELECT u FROM Usuario u")
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idusuario;
private String apellido1;
private String apellido2;
private String email;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_alta")
private Date fechaAlta;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_baja")
private Date fechaBaja;
@Column(name="is_admin")
private boolean isAdmin;
private String nombre;
private String password;
//bi-directional many-to-one association to CompraEntrada
@OneToMany(mappedBy="usuarioBean")
@JsonIgnore
private List<CompraEntrada> compraEntradas;
//bi-directional many-to-one association to Entrada
@OneToMany(mappedBy="usuarioBean")
private List<Entrada> entradas;
//bi-directional many-to-one association to Evento
@OneToMany(mappedBy="usuario")
@JsonIgnore
private List<Evento> eventos;
//bi-directional many-to-one association to Mensaje
@OneToMany(mappedBy="emisor")
@JsonIgnore
private List<Mensaje> mensajesEmitidos;
//bi-directional many-to-one association to Mensaje
@OneToMany(mappedBy="receptor")
@JsonIgnore
private List<Mensaje> mensajesRecibidos;
恩特拉达:
@Entity
@Table(name="entrada")
@NamedQuery(name="Entrada.findAll", query="SELECT e FROM Entrada e")
public class Entrada implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int identrada;
//bi-directional many-to-one association to Evento
@ManyToOne
@JoinColumn(name="evento")
private Evento eventoBean;
//bi-directional many-to-one association to Usuario
@ManyToOne
@JoinColumn(name="usuario")
@JsonIgnore
private Usuario usuarioBean;
我还有 Evento 类(class):
@Entity
@Table(name="evento")
@NamedQuery(name="Evento.findAll", query="SELECT e FROM Evento e")
public class Evento implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idevento;
private String categoria;
private String descripcion;
@Column(name="entradas_disponibles")
private int entradasDisponibles;
@Column(name="entradas_venta")
private int entradasVenta;
private int estado;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_hora")
private Date fechaHora;
private String imagen;
private String localizacion;
@Column(name="precio_entrada")
private double precioEntrada;
private String titulo;
//bi-directional many-to-one association to CompraEntrada
@OneToMany(mappedBy="eventoBean")
private List<CompraEntrada> compraEntradas;
//bi-directional many-to-one association to Entrada
@OneToMany(mappedBy="eventoBean")
private List<Entrada> entradas;
//bi-directional many-to-one association to Usuario
@ManyToOne
@JoinColumn(name="creador")
private Usuario usuario;
我正在使用 Spring Data,但遇到递归序列化问题。当我“打印”Usuario类型的对象时,它应该序列化Usuario的所有信息。这里的要点是,Entrada(Usuario 中的列表)有一个 Usuario 类型的属性。
我不想连载 Entrada 的 Usuario。我只是想序列化 Usuario 列表中的每一项。
我尝试在Entrada中的Usuario类型的属性中添加@JsonIgnore,但仍然遇到同样的问题。
日志显示:
2017-12-04 18:57:46.980[0;39m [31mERROR[0;39m [35m3389[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.a.c.c.C.[.[.[/].[dispatcherServlet] [0;39m [2m:[0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError) (through reference chain: es.softcorp.domains.Entrada["eventoBean"]->es.softcorp.domains.Evento["entradas"]->org.hibernate.collection.internal.PersistentBag[0]->es.softcorp.domains.Entrada["eventoBean"]->es.softcorp.domains.Evento["entradas"]->org.hibernate.collection.internal.PersistentBag[0]->es.softcorp.domains.Entrada["eventoBean"]->es.softcorp.domains.Evento["entradas"]-
等等
最佳答案
我已经解决了这个问题,根据我的内存,@JsonIgnore 要工作,您必须禁用该类的自动字段检测,或者如果您希望所有类都禁用自动字段检测。
有两种方法可以解决递归问题。
@JsonIgnore
、@JsonView
导致递归/循环的字段。对于示例项目,我对所有此类禁用了自动字段检测,并在我想要序列化的类中使用了 @JsonProperty 和 @JsonIgnore 。如果禁用自动检测,您必须手动标记字段。
/**
* Disable auto field detection for JSON message converter.
* @return
*/
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setVisibility(
objectMapper
.getVisibilityChecker()
.with(Visibility.NONE)
);
jsonConverter.setObjectMapper(objectMapper);
return jsonConverter;
}
还有 @JsonView
注释,其工作方式与 @JsonIgnore
类似,可用于选择要序列化的字段,这里是进一步阅读 https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring
解决问题的正确方法是告诉 ObjectMapper 有关递归/双向关系的信息,如本页 http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion 上所述
总之,您在子级(非拥有方)上使用 @JsonManagedReference
并在父级(关系的拥有方)上使用 @JsonBackReference
。
关于java - Spring @JsonIgnore 序列化未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47622352/
Field 上的 JsonIgnore 与 Jackson 字段的 getter 上的 JsonIgnore 有什么区别? 最佳答案 @JsonIgnore注解用于忽略反序列化和序列化的字段,可以直接
是否可以在序列化 JSON 响应的同时根据 If 条件排除某些元素? if(a == 1) { //show element } else { //don't show element }
我有一个域javabean,一些bean包含很多带有密码的信息并登录 Ip,我使用 @jsonIgnore 来过滤我不使用的属性希望最终用户知道。 但是有一个问题,用其他方法我使用相同的 javabe
是否可以在序列化 JSON 响应的同时根据 If 条件排除某些元素? if(a == 1) { //show element } else { //don't show element }
在处理项目时,我犯了一个错误,将 @JsonIgnore 放在 setter 而不是 getter 属性上,如下所示 private Set books; public Set getBooks()
我使用@JsonIgnore属性来忽略pojo中的一些属性,但是使用Gson库解析json后,这些字段在json响应中不会被忽略,请帮忙。 import com.fasterxml.jackson.a
我正在使用一对多基数连接表,我使用的类相互引用。而且我正在使用 @JsonIgnore 注释,但没有深入理解它。 最佳答案 @JsonIgnore 用于忽略序列化和反序列化中使用的逻辑属性。 @Jso
由于某种原因,注释@JsonIgnore在我的项目中不起作用。我已经阅读了一些答案,这可能是由于使用不同的不兼容的 Jackson 版本(org.codehaus 与 com.fasterxml)引起
我是 Java 和 Jackson 以及我尝试使用的许多其他技术的新手,所以我希望得到详细的回答。 有没有一种方法可以防止使用 Jackson 将一个或多个字段序列化为 JSON String_lik
我有以下抽象类: public abstract class StandardTimeStamp { @Temporal(TemporalType.TIMESTAMP) @Column(nul
我有一个类(class)家长 public class Parent { private int id; @JsonIgnore int getId() {} void set
我在处理 Lombok 和 Jackson 时遇到了非常奇怪的问题。以下是我正在处理的一段代码。 @Getter @Setter @NoArgsConstructor @XmlRootElement
我正在使用 spring 4.0.1、hibernate 4.3.5、jackson 1.9.2 和 STS IDE我正在创建一个以 JSON 格式返回数据的 RESTful 网络服务当我使用 Hib
我有这样的东西: @Entity @Table(name = "myEntity") public class MyEntity { //.... @Column(name = "conten
如何解决这个问题? 我尝试将 @JsonIgnore 添加到 getter,但结果是相同的。 POJO: public class Category { // Omitted details
我有一个带有 @JsonIgnore-d 字段的类: public class MyClass { ... @JsonIgnore private SomeType myfie
我有类似的东西: @Entity @Table(name = "myEntity") public class MyEntity { //.... @Column(name = "conten
我可能有 60-70 个类,它们都有各种 Id 列,当我从 Web API 返回 JSON 数据时,我想排除这些列。在内部,我加入了 Id,但任何面向前端的东西都使用 Guid。所以我的主键是 Id
JsonIgnore 属性可用于忽略序列化中的某些属性。我想知道是否可以做相反的事情?所以 JsonSerializer 会忽略每个属性,除非它有一个特殊属性? 最佳答案 是的。当您使用 [JsonO
我有两个 Java 类:Usuario 和 Entrada。 乌苏里奥: @Entity @Table(name="usuario") @NamedQuery(name="Usuario.findAl
我是一名优秀的程序员,十分优秀!