当前位置: 首页 > 知识库问答 >
问题:

带角2的Spring支座

牛凌
2023-03-14
@Entity
public class A{

    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @OneToMany(mappedBy = "A")
    private List<B> b = new ArrayList<B>();
    ...
}

@Entity
public class B{

    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @NotNull
    @ManyToOne
    @JoinColumn(name="aId")
    private A a;
    ...
}

后端的这两个模型在前端有它们的对应。我添加_links部分是因为Spring Rest api提供链接而不是外键:

export class A{
  id: number;

  b: B[];

  _links:{...}
  ...
}

export class B{
  id: number;

  a: A;

  _links:{...}
  ...
}

我根据从API获得的信息创建了这些模型。例如,localhost:8080/api/b/1上的get请求给出:

{
  "id" : 1,
  "_links" : {
    "self" : {
      "href" : "http://localhost:4200/api/b/1"
    },
    "b" : {
      "href" : "http://localhost:4200/api/b/1"
    },
    "a" : {
      "href" : "http://localhost:4200/api/b/1/a"
    }
  }
}

我可以使用下面所示的angular 2服务方法轻松地在表A中插入新行(因为它不包含外键):

  createA(a: A): Observable<A[]>{
    return this.http.post(this.AUrl, a)
                    .map((res:Response) => res.json())
                    .catch((error:any) => Observable.throw(error.json().error || 'Server Error'));
  }
  createB(b: B): Observable<B[]>{
    return this.http.post(this.BUrl, b)
                    .map((res:Response) => res.json())
                    .catch((error:any) => Observable.throw(error.json().error || 'Server Error'));
  }
@RepositoryRestResource(collectionResourceRel="a", path="a", itemResourceRel="a")
public interface ARepository extends JpaRepository<A, Integer>{
}

@RepositoryRestResource(collectionResourceRel="b", path="b", itemResourceRel="b"))
public interface BRepository extends JpaRepository<B, Long>{
}
  @Configuration
public class MyRestConfiguration extends RepositoryRestMvcConfiguration{

    @Override
    protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config){
        config.setBasePath("/api");
        config.exposeIdsFor(A.class);
        config.exposeIdsFor(B.class);
    }
}

在Spring中,当我试图将新行插入到表B中时,会出现以下错误:

javax.validation.ConstraintViolationException: Validation failed for classes [......model.B] during update time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='may not be null', propertyPath=a, rootBeanClass=class ........model.B, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]

我想知道http post请求的请求负载应该是什么样子的,以便应用程序在数据库中插入一个新的B行。非常感谢任何帮助。

编辑:

@PostMapping("/api/b")
@ResponseBody
public String createServis(@RequestBody B b){

}
{
    id:1,
    aId:1
}
{
    id:1,
    a:{id:1}
}
{
    id:1,
    aId:1,
    a:{id:1}
}

对象b的属性a保持为null/未正确初始化。

共有1个答案

曾嘉瑞
2023-03-14

我在这里得到了答案Spring REST:不能插入具有@manytoone列的行

基本情况下,您需要发布:

{
    id: 1
    a: "http://localhost:4200/api/a/1"
}

到url localhost:4200/api/b

 类似资料:
  • 我正在尝试使用Spring Security(4.1.3)和Angular 2.0.1实现CSRF保护 相关话题的来源很多,但我找不到明确的说明。有些说法甚至相互矛盾。 我读过关于springs的操作方法(尽管指南中描述了Angular 1 way)Spring Security guide,其中包含Angular,即

  • > 到目前为止,我使用角2快速入门创建了一个新项目。 我决定开始使用angular 2 cli,并创建了一个新的angular 2 cli项目。 移动了我的所有文件并重新安装了所有软件包。 现在,当我试图在CLI项目中使用角2材料时,我遵循了这里的指南,但这是我得到的: 会出什么问题?

  • 我有一个Spring Boot项目,使用Jersey作为我的REST服务,并使用AngularJS进行我的前端开发。当我在不使用任何控制器的情况下运行它并转到index.html(位于resource/statig/index.html中)时,它运行得很好。当我添加一个控制器时,它呈现给出字符串“index.html”作为输出。Spring Boot配置: 球衣配置: 控制器类:

  • 我有一个单页角应用与Spring引导。它看起来如下所示: Spring Boot正确地默认为webapp文件夹,并为index.html文件服务。 我想做的是:

  • 我实际上正在学习Angular2,但我遇到了一个...CSS问题o_O我曾搜索过一个类似的问题,但没有任何成功,现在开始: 我在中有一个标记元素 我在div中设置了并使用来适应,但似乎根本不起作用,图片不适合div。 我很困惑因为这是第一次发生在我身上 请参阅:我使用styleUrls在组件中注入css规则 代码 谢谢!

  • 编辑问题包括期望的行为, 我正在编写一个Angular 2应用程序,我不明白为什么Angular不能正确使用