从路径变量中检索数据并插入到模型中
Retrieve data from Path Variable and Insert to Model
我是 Java Springboot 的新手。 我想从路径变量 ("/id") 中插入 ID 到我的模型并将其保存到数据库中。
我有请求正文
{
"firstName" : "John",
"lastName" : "Doe"
}
我有 API 可以像这样在数据库中创建记录
我的用户控制器
@RestController
@RequestMapping("/api")
public class UserController{
@Autowired
private UserService userService;
@PostMapping("/{id}")
public User create(@RequestBody User user){
return userService.save(user);
}
}
这是我的用户服务
@Service
@Transactional
public class UserService {
@Autowired
private UserRepo userRepo;
//Create
public User save(User user){
return userRepo.save(user);
}
}
这是我的用户库
public interface UserRepo extends CrudRepository<User, Long> {
//CrudRepository will automatically CRUD
}
和 UserModel
@Entity
@Table(name = "users")
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "first_name", length = 25)
private String firstName;
@Column(name = "last_name", length = 25)
private String lastName;
@Column(name = "full_name", length = 50)
private String fullName;
public User() {
}
public User(Long id, String firstName, String lastName, String fullName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.fullName = fullName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
}
最后,我的问题回复JSON
{
"id": null,
"firstName": "John",
"lastName": "Doe",
"fullName" : null
}
问题是如何将 @PostMapping("/id") 中的 id 插入模型用户。
如果 link 是 http://localhost:8080/api/5
响应正文是
{
"firstName" : "Silvanna",
"lastName" : "Rey"
}
所以响应 JSON 将如下所示:
{
"id": 5,
"firstName": "Silvanna",
"lastName": "Rey",
"fullName" : "Silvanna Rey"
}
注意:id 不是自动递增
您提到的第一个问题,即通过路径参数将变量保存到数据库,如下例所示,其工作方式如下:
http://localhost:8080/api/employees/111
@RestController
@RequestMapping("/api")
public class UserController{
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User create(@PathVariable String id){
return userService.find(user);
}
}
然而,如上所述,这些操作仅适用于 GET
,这意味着您不能仅将 id
保存到数据库中,您需要自动生成一个 ID 并将其保存到数据库中,然后POST
就像您已经在做的那样,它与用户主体一起进入数据库。
@Entity
@Table(name = "users")
public class User implements Serializable{
// the @GeneratedValue is used to automatically generate the id
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
所以总而言之,id 用于通过函数 find 从数据库中获取数据,而 save 已经生成了一个用户 id 以将其保存到数据库中。
亲爱的,您可以使用@PathVariable 注释从路径变量中获取数据。
从路径变量中获取 id 后,您可以通过调用 setUserId() 方法将其设置为用户模型的 id 属性。
尝试打击代码片段以获得所需的输出。
@PostMapping("/{id}")
public User create(@PathVariable("id") Long id, @RequestBody User user){
// Setting data for user id
user.setId(id);
// Setting fullName from firstName and lastName
String fullName = user.getFirstName()+" "+user.getLastName();
user.setFullName(fullName);
return userService.save(user);
}
我是 Java Springboot 的新手。 我想从路径变量 ("/id") 中插入 ID 到我的模型并将其保存到数据库中。
我有请求正文
{
"firstName" : "John",
"lastName" : "Doe"
}
我有 API 可以像这样在数据库中创建记录 我的用户控制器
@RestController
@RequestMapping("/api")
public class UserController{
@Autowired
private UserService userService;
@PostMapping("/{id}")
public User create(@RequestBody User user){
return userService.save(user);
}
}
这是我的用户服务
@Service
@Transactional
public class UserService {
@Autowired
private UserRepo userRepo;
//Create
public User save(User user){
return userRepo.save(user);
}
}
这是我的用户库
public interface UserRepo extends CrudRepository<User, Long> {
//CrudRepository will automatically CRUD
}
和 UserModel
@Entity
@Table(name = "users")
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "first_name", length = 25)
private String firstName;
@Column(name = "last_name", length = 25)
private String lastName;
@Column(name = "full_name", length = 50)
private String fullName;
public User() {
}
public User(Long id, String firstName, String lastName, String fullName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.fullName = fullName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
}
最后,我的问题回复JSON
{
"id": null,
"firstName": "John",
"lastName": "Doe",
"fullName" : null
}
问题是如何将 @PostMapping("/id") 中的 id 插入模型用户。
如果 link 是 http://localhost:8080/api/5 响应正文是
{
"firstName" : "Silvanna",
"lastName" : "Rey"
}
所以响应 JSON 将如下所示:
{
"id": 5,
"firstName": "Silvanna",
"lastName": "Rey",
"fullName" : "Silvanna Rey"
}
注意:id 不是自动递增
您提到的第一个问题,即通过路径参数将变量保存到数据库,如下例所示,其工作方式如下:
http://localhost:8080/api/employees/111
@RestController
@RequestMapping("/api")
public class UserController{
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User create(@PathVariable String id){
return userService.find(user);
}
}
然而,如上所述,这些操作仅适用于 GET
,这意味着您不能仅将 id
保存到数据库中,您需要自动生成一个 ID 并将其保存到数据库中,然后POST
就像您已经在做的那样,它与用户主体一起进入数据库。
@Entity
@Table(name = "users")
public class User implements Serializable{
// the @GeneratedValue is used to automatically generate the id
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
所以总而言之,id 用于通过函数 find 从数据库中获取数据,而 save 已经生成了一个用户 id 以将其保存到数据库中。
亲爱的,您可以使用@PathVariable 注释从路径变量中获取数据。 从路径变量中获取 id 后,您可以通过调用 setUserId() 方法将其设置为用户模型的 id 属性。
尝试打击代码片段以获得所需的输出。
@PostMapping("/{id}")
public User create(@PathVariable("id") Long id, @RequestBody User user){
// Setting data for user id
user.setId(id);
// Setting fullName from firstName and lastName
String fullName = user.getFirstName()+" "+user.getLastName();
user.setFullName(fullName);
return userService.save(user);
}