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

[解析]Spring Boot:如何在执行post请求时将子项保存在现有父项中

乐正远航
2023-03-14

我已经挣扎了几个小时来执行一个POST请求,将一个子(章)保存到父(用户)上。它不能正常工作,我找不到原因....

http://localhost:8080/api/chapters?username=admin
Content-type: application/json
Body: raw
{
    "name": "Product Development", 
}
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, updatable = false)
private Long id;

@Column(nullable = false, unique = true)
private String username;

@Column(nullable = false)
private String password;

@Column(nullable = false)
private String role;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user")
private Set<Chapter> chapters = new HashSet<>();

public void addChapter(Chapter chapter) {
    this.chapters.add(chapter);
    chapter.setUser(this);
}
....
}

@Entity
public class Chapter {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, updatable = false)
private Long id;
    private String name;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
....

}

@RestController
public class ChapterController {
@Autowired
private ChapterRepository chapterRepository;

@Autowired
private UserRepository userRepository;


@RequestMapping("/chapters")
public Iterable<Chapter> getChapter() {
    return chapterRepository.findAll();
}

@RequestMapping(value="/users/{id}/chapters", method = RequestMethod.GET)
Chapter getChapter(@PathVariable (value = "id") Long id) {
    return chapterRepository.findByUserId(id).get();
}

@PostMapping("/chapters")// issue is here
void newChapter(@RequestParam (value = "username", required=true) 
String username, @RequestBody Chapter newChapter) {
    User user = userRepository.findByUsername(username);
    user.addChapter(newChapter);
    System.out.println(user);
    userRepository.save(user);
    }
}

我希望用父级保存子级,这意味着用user_id=1,因为目前只有一个用户(id=1)。你能告诉我我错过了什么吗?

多谢

--------------更新--------------------------------------------------------------------------------------------------------------------------------------

我不知道为什么,因为在我的应用程序中。属性:

 spring.data.rest.basePath=/api

但不管怎样,这是我的问题...

共有1个答案

白阳煦
2023-03-14

必须为@manytoone映射添加级联。在用户@entity中更新这一行,它就可以工作了:

@Entity
public class Chapter {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, updatable = false)
    private Long id;

    private String name;

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    @JoinColumn(name = "user_id")
    private User user;

}

您可能要做的第二件事是更新控制器,因此它将用户id分配给新的章节,如下所示:

@PostMapping("/chapters")// issue is here
void newChapter(@RequestParam (value = "username", required=true)
                        String username, @RequestBody Chapter newChapter) {
    User user = userRepository.findByUsername(username);
    newChapter.setUser(user);
    user.addChapter(newChapter);
    System.out.println(user);
    userRepository.save(user);
}
 类似资料:
  • 首先,请看一下代码。 对于优先级和步骤,我给出了onChange事件,因为它是一个选择表单。 此函数用于POST请求。我将每个编辑的数据发送到DB。 但是数据对象,您可以看到updateCols:[]。 在这个数组中,我必须放置已更改的属性。 例如,如果我更改标题、说明和开始日期,我必须将数组更改为 我觉得不可能每次都能查到这张申请表,所以我觉得这张申请表有问题。 有人可能只编辑标题,有人可能编辑

  • 我有以下根项目设置: 当我键入时,我得到一个错误,说明: [错误](运行main)java。sql。SQLException:未找到适合jdbc的驱动程序:mysql://localhost/db?user=userid 因此,在运行期间,项目中的依赖项似乎不是类路径的一部分?我觉得很奇怪只是这种依赖而不是其他。。。这是动态加载类的方式吗? 有没有解决办法?

  • 我已经用谷歌搜索了它。但是这些都不能解决我的问题。我在调用rest控件时,代码中的SSL证书出现了问题。 我的控制方法是: 错误为:-I/O错误在“https://myurl.com”的POST请求上:sun.security.validator.validatoreXception:PKIX路径构建失败:sun.security.provider.certpath.suncertPathBuil

  • 我已经做了一个简单的场景登录在ASP点网络应用程序。但是我在登录时发送的请求在执行时显示为GET。第一个图像是HTTP请求的屏幕截图,第二个图像是执行时请求详细信息的屏幕截图。如何将该请求转换为POST请求?还添加了显示“对象移动到这里”消息的响应数据截图。

  • 问题内容: 我需要能够在我们的Jenkins Pipeline构建过程中创建简单的HTTP POST请求。但是,我不能使用简单的curl sh脚本,因为我需要它在Windows和Linux节点上工作,并且如果可以避免的话,我不希望在节点上执行更多的工具安装。 我们正在使用的Pipeline插件中使用的Groovy库对于此任务应该是完美的。Groovy有一个扩展名,可以执行简单的POST,称为htt

  • 我需要能够在我们的Jenkins管道构建期间创建简单的HTTP POST请求。但是我不能使用简单的curl sh脚本,因为我需要它在Windows和Linux节点上工作,如果我可以避免的话,我不希望在节点上强制安装更多的工具。 我们正在使用的管道插件中使用的Groovy库应该非常适合此任务。Groovy有一个扩展来执行简单的POST,称为http builder,但我一生都无法在Jenkins的G