您好,我实际上是在使用Spring-boot,hibernate,psql在REST服务器上工作,在实体之间添加OneToOne关系后遇到了一些困难。
这是2个实体:
付款:
@Entity
@Table(name = "pays")
public class Pays implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@JsonProperty("codePays")
private String codePays;
@Column(name = "libelle_pays")
@JsonProperty("libellePays")
private String libellePays;
@OneToOne(mappedBy = "pays",cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional=false)
private Traduction traduction;
protected Pays() {
}
public Pays(String codePays,String libellePays) {
this.codePays = codePays;
this.libellePays = libellePays;
}
和简介:
@Entity
@Table(name = "traduction")
public class Traduction implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonProperty("codeTrad")
private long codeTrad;
@Column(name = "defaultLanguage")
@JsonProperty("defaultLanguage")
private boolean defaultLanguage;
@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name="fk_code_pays")
@JsonProperty("codePays")
private Pays pays;
public Traduction(){
}
public Traduction(String codePays,boolean defaultLanguage) {
this.defaultLanguage = defaultLanguage;
pays.setCodePays(codePays);
}
当我尝试使用Post方法填充表转换时,会发生我的问题:
@PostMapping("/traduction")
public Traduction createTraduction(@RequestBody Traduction trad) {
System.err.println(trad);
return repository.save(trad);
}
当我通过PostMan将JSON数据发送到服务器时,
{ “ codeTrad”:0, “ defaultLanguage”:true, “ fk_code_pays”:“ FR” }
或这种方式:
{ “ codeTrad”:0, “ defaultLanguage”:true, “付款”: { “ codePays”:“ FR”, “ libellePays”:“法国” } }
我的服务器似乎不了解与对象Pays的映射。 以下是我请求后的对象Traduction的外观: [codeTrad = 0,null,defaultLanguage = true]
和漂亮的错误:
已解决的[org.springframework.http.converter.HttpMessageNotWritableException:无法编写JSON :(为java.lang.NullPointerException);嵌套的异常是com.fasterxml.jackson.databind.JsonMappingException :(是java.lang.NullPointerException)(通过参考链:com.auchan.corp.ipon.iponportail.model.Traduction [“ codePays”]))]
所以我想知道问题是来自服务器概念还是仅来自JSON。你有主意吗?
答案 0 :(得分:0)
您的问题来自:
public Traduction(String codePays, boolean defaultLanguage) {
this.defaultLanguage = defaultLanguage;
pays.setCodePays(codePays)
pays为null,这就是为什么出现异常java.lang.NullPointerException
的原因,请尝试将Pays pays添加到该构造函数。
答案 1 :(得分:0)
此json无法正常工作:
{ "codeTrad":0, "defaultLanguage":true, "fk_code_pays":"FR" }
因为您的fk_code_pays
类中没有字段名Traduction
。
以下任何一项都不起作用:
{ "codeTrad":0, "defaultLanguage":true, "pays": { "codePays":"FR", "libellePays":"France" } }
因为付款用@JsonProperty("codePays")
注释
根据您的DTO类,您的json应该是:
{ "codeTrad":0, "defaultLanguage":true, "codePays": { "codePays":"FR", "libellePays":"France" } }
我也建议您使用包装器类代替基元。 Boolean
代替boolean
,Long
代替long
。