spring - JPA 实体默认构造函数覆盖 n-args 构造函数
问题描述
如果有默认构造函数,我无法通过 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;
}
推荐阅读
- unit-testing - 在不同包的测试文件之间共享数据
- html - 将子元素放在兄弟元素之上
- react-native - 使用 React Native 构建可在 Android 和 Windows 10 平台上运行的应用程序
- angularjs - 成功注销后,keycloak 会话未终止
- jquery - 如何使用 jQuery 更改 data-rules-required 的值
- vim - 如何在 Vim 中更改部分变量/函数名
- xslt - 我们如何在 XSLT 中将一个元素称为另一个元素?
- sql - 如何解决 schema_of_json 的这个 sql 错误
- acumatica - 如何在 Acumatica 的 pxtimelist 中获得超过 24 小时?
- debugging - 在没有 Windows 的非常短暂的应用程序中调试内存使用情况