使用p-dropdown PrimeNG生成正确的json

时间:2018-11-02 05:29:19

标签: java json typescript primeng

我是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

谢谢!

1 个答案:

答案 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"}

希望有帮助!