我正在制作 Spring Boot (2.1.9) api,并使用 Postman 将一些 JSON POST 到我的控制器中的函数,该函数将其转换为实体(作者)。我的控制器对象正确接收该对象及其字段,将其传递给我的服务对象并将其传递给我的数据访问对象。
调用 CrudRepository save(S实体) 函数时会出现问题,尽管打印了字段并验证它们不为空,但我收到一个异常,声称我的字段确实为空。该实体未添加到数据库中。
我尝试添加 auto_increment,更改生成类型。我尝试过在 Postman 中发送 null 的 Id,也尝试过不在 Postman 中发送 Id。我不知道如何解决这个问题,因为删除 @GenerateValue 似乎可行,但并不理想,因为 save() 会根据这篇文章用新数据覆盖具有相同 id 的任何预先存在的行。
(注意:我还没有完成任何正确的http状态,我只想让它在那之前工作)
我的控制器:
@RestController
@RequestMapping(value = "/lms/admin*")
public class AdminController
{
@Autowired
AdminService admin;
@PostMapping(path = "/author", produces = "application/json", consumes="application/json")
public ResponseEntity<?> createAuthor(@RequestBody Author author)
{
return new ResponseEntity<>(admin.createAuthor(author),HttpStatus.OK);
}
/*other CRUD operations*/
}
我的服务:
@Component
public class AdminService
{
@Autowired
private AuthorDataAccess authorDao;
public Author createAuthor(Author author)
{
System.out.println(author.toString());
return authorDao.save(author);
}
/*other service functions*/
}
我的作者数据访问
@Component
public interface AuthorDataAccess extends CrudRepository<Author, Integer>
{
}
我的作者实体:
@Entity
@Table(name = "tbl_author", schema = "library")
public class Author implements Serializable
{
private static final long serialVersionUID = 3002288345129007776L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(updatable = false)
private Integer authorId;
private String authorName;
public Author(){}
public Author(String authorName)
{
this.authorName = authorName;
}
public Author(Integer authorId, String authorName)
{
this.authorId = authorId;
this.authorName = authorName;
}
/*hashcode, equals, toString, getters, setters*/
}
mySQL 表:
CREATE TABLE IF NOT EXISTS `library`.`tbl_author` (
`authorId` INT(11) NOT NULL,
`authorName` VARCHAR(45) NOT NULL,
PRIMARY KEY (`authorId`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
慕妹3242003
相关分类