如果存在默认构造函数,则无法通过n-args构造函数初始化实体对象。如果我没有指定默认构造函数,我可以通过POST请求初始化我的对象。然而,由于没有默认的构造函数,我无法获取对象。((
这是我的代码:
@Entity
@Table(name = "result")
public class Result {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(name="term")
private String term;
@Column(name="hitsPerYear")
private int[] hitsPerYear;
@Column(name="year_begin")
private int year_begin;
@Column(name="year_end")
private int year_end;
public Result() {
super();
System.out.println("Default Constructor");
}
public Result(String term, int year_begin, int year_end, String key) {
super();
System.out.println("n-args constructor");
this.term = "Some String to see if it works";
this.year_begin = year_begin;
this.year_end = year_end;
int[] someTestArr = {1,2,3,4}
this.hitsPerYear = someTestArr;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTerm() {
return term;
}
public void setTerm(String term) {
this.term = term;
}
public int[] getHitsPerYear() {
return hitsPerYear;
}
public void setHitsPerYear(int[] hitsPerYear) {
this.hitsPerYear = hitsPerYear;
}
public int getYear_begin() {
return year_begin;
}
public void setYear_begin(int year_begin) {
this.year_begin = year_begin;
}
public int getYear_end() {
return year_end;
}
public void setYear_end(int year_end) {
this.year_end = year_end;
}
}
如果我试图通过POST请求初始化result类型的对象:
{
"term":"hello",
"year_begin":2019,
"year_end":2020,
"key":"scraperapiKey"
}
我得到的回复是:
{
"id": 3,
"term": "hello",
"hitsPerYear": null,
"year_begin": 2019,
"year_end": 2020
}
在java控制台上,我可以看到只调用了默认的构造函数(sysout(。
据我记忆所及,在jpa中,通过n-args构造函数进行初始化总是可能的。这种情况改变了吗?
试试这个:
@JsonCreator
public Result(@JsonProperty("term") String term, @JsonProperty("year_begin") int year_begin, @JsonProperty("year_end") int year_end, @JsonProperty("key") String key) {
this.term = term;
this.year_begin = year_begin;
this.year_end = year_end;
this.key = key;
}