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

如何将2个实体解析为JSON for Controller(具有2x@RequestBody参数)

楚浩然
2023-03-14

我想知道是否可以为我的控制器解析2个实体作为一个JSON,它确实有2x@RequestBody(对于每个实体),首先我想检查这是否可能,因为我希望有一个控制器有3x@RequestBody(3个实体)。

控制器如下所示:

@RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<KoordynatorzyPraktykEntity> addCoordinator(@RequestBody KoordynatorzyPraktykEntity koordynatorzyPraktykEntity, @RequestBody OsobyEntity osobyEntity) {
        KoordynatorzyPraktykEntity addCoordinator = ikoordynatorzyPraktykService.addCoordinator(koordynatorzyPraktykEntity);
        OsobyEntity addPerson = ikoordynatorzyPraktykService.addPerson(osobyEntity, koordynatorzyPraktykEntity);
        if (addCoordinator !=null && addPerson !=null) {
            return new ResponseEntity<KoordynatorzyPraktykEntity>(addCoordinator, HttpStatus.OK);
        }
        else {
            return new ResponseEntity<KoordynatorzyPraktykEntity>(HttpStatus.NOT_FOUND);
        }
    }

服务:

@Override
    public OsobyEntity addPerson(OsobyEntity osobyEntity, KoordynatorzyPraktykEntity koordynatorzyPraktykEntity) {
        OsobyEntity newPerson = iosobyDAO.addPerson(osobyEntity);
        newPerson.setKoordynator(koordynatorzyPraktykEntity);
        int idOsoby = newPerson.getIdOsoby();
        koordynatorzyPraktykEntity.setIdOsoby(idOsoby);
        koordynatorzyPraktykEntity.setKoordynatorByIdOsoby(newPerson);
        return newPerson;
    }
@Entity
@Table(name = "osoby", schema = "public", catalog = "praktykidb")
public class OsobyEntity {
    private int idOsoby;
    /*
    some stuff
    */

    private KoordynatorzyPraktykEntity koordynator;

@Id
    @GeneratedValue
    @Column(name = "id_osoby")
    public int getIdOsoby() {
        return idOsoby;
    }

    public void setIdOsoby(int idOsoby) {
        this.idOsoby = idOsoby;
    }
/*
some stuff
*/
@OneToOne(mappedBy = "koordynatorByIdOsoby", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    public KoordynatorzyPraktykEntity getKoordynator() {
        return koordynator;
    }

    public void setKoordynator(KoordynatorzyPraktykEntity koordynator) {
        this.koordynator = koordynator;
    }
@Entity
@Table(name = "koordynatorzy_praktyk", schema = "public", catalog = "praktykidb")
public class KoordynatorzyPraktykEntity {
    private int idKoordynatoraPraktyk;
    private int idOsoby;
    private String doTestow;

    private OsobyEntity koordynatorByIdOsoby;
    private Collection<KoordynatorzyKierunkowiEntity> koordynatorzyByIdKierunku;

    @Id
    @GeneratedValue
    @Column(name = "id_koordynatora_praktyk")
    public int getIdKoordynatoraPraktyk() {
        return idKoordynatoraPraktyk;
    }

    public void setIdKoordynatoraPraktyk(int idKoordynatoraPraktyk) {
        this.idKoordynatoraPraktyk = idKoordynatoraPraktyk;
    }

    @Basic
    @Column(name = "id_osoby")
    public int getIdOsoby() {
        return idOsoby;
    }

    public void setIdOsoby(int idOsoby) {
        this.idOsoby = idOsoby;
   /*
   some stuff
   */
    @JsonIgnore
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "id_osoby", referencedColumnName = "id_osoby", insertable = false , updatable = false)
    public OsobyEntity getKoordynatorByIdOsoby() {
        return koordynatorByIdOsoby;
    }

    public void setKoordynatorByIdOsoby(OsobyEntity koordynatorByIdOsoby) {
        this.koordynatorByIdOsoby = koordynatorByIdOsoby;
    }

    @JsonIgnore
    @OneToMany(mappedBy = "koordynatorzyByIdKierunku", cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    public Collection<KoordynatorzyKierunkowiEntity> getKoordynatorzyByIdKierunku() {
        return koordynatorzyByIdKierunku;
    }

    public void setKoordynatorzyByIdKierunku(Collection<KoordynatorzyKierunkowiEntity> koordynatorzyByIdKierunku) {
        this.koordynatorzyByIdKierunku = koordynatorzyByIdKierunku;
    }
[StudentEntity]                 [AddressEntity]
idOfStudent (PK)       /--------idOfAddress (PK)
idOfAddress (FK)<-----/
idOfPerson  (FK)<-----\         [PersonEntity]
                       \--------idOfPerson (PK)

对于2实体,这不是问题,但是对于3我不知道该怎么办,因为当我创建Student时,它将Address和Person的ID指定为0,然后当我想添加Address时,我想用他的ID搜索(em.find)Student,但他也在idOfAddress=0和idOfPerson=0的Address和Person实体中查找行。也许有一种方法可以使这些ID为空,当我将学生持久化到实体?也许还有别的想法?

共有1个答案

慕容昊焜
2023-03-14

这是一种错误的方法,因为请求正文只能被使用一次,所有随后再次处理正文的尝试都将导致IOException表示流关闭。

相反,您应该为OsobyEntity和KoordynatorzyPraktykEntity类型构建和注册一个自定义参数解析器,并实现相同的效果。

 类似资料:
  • 问题内容: 我正在尝试获取以html格式格式化的文本片段,以在UITableViewCell中的iPhone上很好地显示。 到目前为止,我有这个: 这种作品。我得到一些加粗的“ Nice”文字!但是…它还将字体设置为Times Roman!这不是我想要的字体。我想我需要在documentAttributes中设置一些内容,但是,我在任何地方都找不到任何示例。 问题答案: 弄清楚了。有点负担,也许不

  • 我正在尝试执行以下操作:但这不起作用:`puthttp://localhost:8080/university/api/v1/study/content-type:application/json {“course”:{“id”:1},“student”:{“id”:5}}`如何在json中创建2个实体

  • 我有一个基本接口,并从中扩展了3个接口,和。在对进行了一些业务更改之后,现在与相同,但为了一致性,我不希望仅使用,而不是使用扩展接口。我试着这样做: 然后,ESLint警告我不要使用空接口。如果我不想禁用此规则,是否有方法将声明为与相同的接口?

  • 我正在尝试为实体创建一个域模型(聚合),该实体包含子实体,并且可以有父实体。我们有实体包。我们可以把包裹分成更小的包裹(儿童)。每个分开的包都有一个父包。域的哪个部分应该包含域逻辑:聚合还是域服务?e、 g.聚合包有一个方法 分包还是原包?解决这个问题的正确方法是什么? 我希望我的域模型被ddd(应用程序和基础设施)的其他部分保持干净和幂等

  • 对于任何一个 ORM 工具,大都是根据配置者约定了解你打算怎么把一张数据表与你的 Java 对象 映射到一起。默认的 Nutz.Dao 采用 Java 注解(Annotation) 的方式描述这个映射,但是,当然 世界上还有很多其它的映射方式,比如用各种配置文件,比如 JPA 的注解,或者你很想把这个 映射关系写在数据库的几张表里,甚至一个 Excel 表格里(你就觉得这样很酷) 从 1.b.38

  • 我有应用程序,以自定义字体样式生成报告,如字体家族,颜色,大小和样式(粗体,斜体,下划线)。我使用Windows系统中的所有字体族。

  • 我有一个实体列表,这些实体又有另一个(可嵌入)类型的字段 所有这些实体都应转换为一个bean,其中包含这些可嵌入类型的列表。在使用推土机之前,我编写了一个转换方法。我已经把这个放进了dozerBeanMapping。xml: 我这样实例化推土机: 我必须调用哪个map方法?使用 未调用自定义转换器。 试图唤起 很好,但我必须转换列表 我如何才能实现这一点?

  • 我试图通过POST方法将参数发送到php到mysql。我的代码似乎没有将参数加载到httpPost中。调试时,我看到httpPost变量下的参数为null,并且似乎没有拾取实体。如果您有任何帮助,我们将不胜感激。我正在使用android studio。 主要活动 写数据库。java构建列表Namevaluepairs } 我的JSONParser。 } 还有我的Logcat