我是Angular的新手,在Java中使用API有以下情况:
我有class Release
,其中类别不是必需的(类别类别)。
@Entity
@Table (name = "release")
public class Release {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String description;
@ManyToOne
@JoinColumn (name = "id_category")
private Category;
(...)
}
当我使用REST API在Angular中创建的页面上注册发布时,我将json
发送到此API,如下所示:
{"description": "test", "category": {}}
由于未告知类别。但是我的API返回以下错误(在Java中):
TransientObjectException-对象引用了未保存的瞬态 实例-在刷新之前保存瞬态实例
我在Postman中进行了测试,并按如下所示发送了json
来注册发布:
{"description": "test"}
这样我可以注册,那么就会有疑问:
以下是使用p-dropdown
的{{1}}组件的Angular中的错误:
PrimeNG
还是该类发布中的类别声明中有错误?
注册通知类别的发行版时,没有错误,并且 <p-dropdown placeholder = "Select ..." [autoWidth] = "false"
[filter] = "true" [options] = "categories"
[(ngModel)] = "release.category.id" name = "category"
#category = "ngModel"> </ p-dropdown>
发送如下:
json
谢谢!
答案 0 :(得分:0)
无论哪种情况,p下拉选项都接受Array,并且在这里您将返回对象
{"description": "test", "category": {}}
应该是
{"description": "test", "category": [{"name":"John", "id": "1"},{"name":"Kan", "id": "2"}]}
然后它将接受数组作为选项。
,并且您必须使用optionLabel
属性来定义要在列表中显示的键。
<p-dropdown placeholder = "Select ..." [autoWidth] = "false"
[filter] = "true" [options] = "categories"
[(ngModel)] = "release.category.id" name = "category"
#category = "ngModel" [optionLabel]="name"> </ p-dropdown>
在这种情况下,如果用户选择,您的ngModel将具有整个对象
{"name":"John", "id": "1"}
如果希望,如果用户选择John,则返回单个值“ 1”。 您必须像下面那样修改选项Array:
[{"label":"John", "value": "1"},{"label":"Kan", "value": "2"}
希望有帮助!