我對 Spring boot 非常陌生,這是我的第一個 spring 虛擬專案,我正在嘗試學習在 mysql-db 中保存一組物件。
實際上,我正在嘗試使用控制器中 crudRepository 中的 saveAll 方法。但這給了我一個錯誤no instance(s) of type variable(s) S exist so that Iterable<S> conforms to List<User>
我的 JSON 看起來像這樣:
[
{
"first_name": "Jack",
"last_name": "Jill",
"email": "[email protected]",
"password": "passq3623"
},
{
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"password": "pass23"
}
]
這是我的物體類
package com.example.testbatch.Entities;
import javax.persistence.*;
@Entity
@Table(name = "user")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
public String first_name;
public String last_name;
public String email;
public String password;
}
這是我的用戶模型類
package com.example.testbatch.Models;
public class User {
public int id;
public String firstName;
public String lastName;
public String email;
public String password;
}
這是我的存盤庫
package com.example.testbatch.Repositories;
import com.example.testbatch.Entities.UserEntity;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface UserRepository extends CrudRepository<UserEntity, Integer> {
@Override
List<UserEntity> findAll();
}
這是我的休息控制器
package com.example.testbatch.Controllers;
import com.example.testbatch.Entities.UserEntity;
import com.example.testbatch.Models.User;
import com.example.testbatch.Repositories.UserRepository;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api/v1/user")
public class UserController {
@Autowired
UserRepository userRepository;
@PostMapping("/register")
public void saveUsers(@RequestBody UserEntity userEntity) {
List<User> persistedUser = userRepository.saveAll(List.of(userEntity));
}
}
誰能幫幫我嗎?這是我第一次使用彈簧靴
uj5u.com熱心網友回復:
您的代碼有一些問題:
首先你有一個DTO(User類),所以,你應該在你的控制器的方法中使用這個DTOsaveUsers,更重要的是你在你的 JSON 中傳遞一個物件陣列,所以你必須使用 a Listnot anObject作為引數:
public void saveUsers(@RequestBody List<User> users) {...}
另一個問題是您沒有任何DTO ( ) 和 Entity ( ) 類,getters并且您必須在DTO類中添加一個方法以將DTO映射到Entity:setterspublic class Userpublic class UserEntity
public class User {
...
public static UserEntity dtoToEntity(User user){
UserEntity userEntity = new UserEntity();
userEntity.setEmail(user.getEmail());
userEntity.setPassword(user.getPassword());
userEntity.setFirst_name(user.getFirstName());
userEntity.setLast_name(user.getLastName());
return userEntity;
}
}
此外,您必須更改 JSON 屬性以匹配 DTO 的屬性:
[
{
"firstName": "Jack",
"lastName": "Jill",
...
},
...
]
作為最后一個,將控制器saveUsers方法更改為(saveAll 方法回傳Iterablenot List):
@PostMapping("/register")
public void saveUsers(@RequestBody List<User> users) {
List<UserEntity> userEntities = new ArrayList<>();
for (User user : users) {
userEntities.add(dtoToEntity(user));
}
Iterable<UserEntity> persistedUser = userRepository.saveAll(userEntities);
}
注意:請記住,因為您在Entity中有自動生成的 id ,所以您的DTO不需要 id 屬性,顯然是因為它是自動生成的,您不需要從輸入中獲取它;
uj5u.com熱心網友回復:
user_repo 正在回傳一個 UserEntity 型別的串列,而在你的控制器中你要求一個用戶型別的串列
UserEntity 和 User 之間沒有映射關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/466489.html
