Spring Boot Sping Boot + Angular 5 -http.post空值

pinkon5k  于 2024-01-06  发布在  Spring
关注(0)|答案(2)|浏览(138)

我正在做一个客户端/服务器的项目,我使用的是spring Boot 和angular。
所以我有一个表单,我想从输入字段中获取数据并将其发送到后端,我的数据库(mySQL),但问题是它只在我的数据库中添加空字段。angular.io
表单输入示例:

  1. <div class="form-group">
  2. <label for="body">Body:</label>
  3. <input type="text" class="form-control" id="body"
  4. [ngModel]="article?.body" (ngModelChange)="article.body = $event" name="body">
  5. </div>

字符串
我想添加的文章的模型类:

  1. export class Article {
  2. id: string;
  3. title: string;
  4. abstract_art: string;
  5. writer: string;
  6. body: string;
  7. }


我添加的组件:

  1. @Component({
  2. selector: 'app-add',
  3. templateUrl: './add-article.component.html'
  4. })
  5. export class AddArticleComponent {
  6. article: Article = new Article();
  7. writers: Writer[];
  8. constructor(private router: Router, private articleService: ArticleService) {
  9. }
  10. createArticle(): void {
  11. console.log(this.article);
  12. this.articleService.createArticle( this.article).subscribe( data => { alert('Article created successfully.');
  13. });
  14. console.log('function called!');
  15. }
  16. get diagnostic() { return JSON.stringify(this.article); }
  17. }


服务等级:

  1. const httpOptions = {
  2. headers: new HttpHeaders({ 'Content-Type': 'application/json',
  3. 'Authorization': 'my-auth-token'})
  4. };
  5. @Injectable()
  6. export class ArticleService {
  7. constructor(private http: HttpClient) {}
  8. // private userUrl = 'http://localhost:8080/articles';
  9. private articleUrl = '/api';
  10. public getArticles() {
  11. return this.http.get<Article[]>(this.articleUrl);
  12. }
  13. public deleteArticle(article) {
  14. return this.http.delete(this.articleUrl + '/' + article.id, httpOptions);
  15. }
  16. public createArticle(article) {
  17. // const art = JSON.stringify(article);
  18. console.log(article);
  19. return this.http.post<Article>(this.articleUrl, article);
  20. }
  21. }


现在是后端。Article Class

  1. @Entity
  2. @Getter @Setter
  3. @NoArgsConstructor
  4. @ToString @EqualsAndHashCode
  5. @Table(name="article")
  6. public class Article {
  7. @Id
  8. @GeneratedValue(strategy = GenerationType.AUTO)
  9. private int id;
  10. @Column(name="title")
  11. private String title;
  12. @Column(name="abstract_art")
  13. private String abstract_art;
  14. @Column(name="writer")
  15. private String writer;
  16. @Column(name="body")
  17. private String body;
  18. public Article(String title,String abstract_art, String writer, String body) {
  19. this.title = title;
  20. this.body = body;
  21. this.abstract_art = abstract_art;
  22. this.writer = writer;
  23. }
  24. }


仓库:

  1. @RepositoryRestResource
  2. //@CrossOrigin(origins = "http://localhost:4200")
  3. public interface ArticleRepository extends JpaRepository<Article,Integer> {
  4. }


文章服务:

  1. @Service
  2. public class ArticleServiceImpl implements ArticleService {
  3. @Autowired
  4. private ArticleRepository repository;
  5. @Override
  6. public Article create(Article article) {
  7. return repository.save(article);
  8. }
  9. @Override
  10. public Article delete(int id) {
  11. Article article = findById(id);
  12. if(article != null){
  13. repository.delete(article);
  14. }
  15. return article;
  16. }
  17. @Override
  18. public List<Article> findAll() {
  19. return repository.findAll();
  20. }
  21. @Override
  22. public Article findById(int id) {
  23. return repository.getOne(id);
  24. }
  25. @Override
  26. public Article update(Article art) {
  27. return null;
  28. }
  29. }


控制器:

  1. @RestController
  2. @RequestMapping({"/api"})
  3. public class ArticleController {
  4. @Autowired
  5. private ArticleService article;
  6. //Get all articles
  7. @GetMapping
  8. public List<Article> listAll(){
  9. return article.findAll();
  10. }
  11. // Create a new Article
  12. //@PostMapping
  13. @PostMapping
  14. public Article createArticle(Article art) {
  15. return article.create(art);
  16. }
  17. // Get a Single Article
  18. @GetMapping(value="/{id}")
  19. public Article getArticleById(@PathVariable("id") int id ){
  20. return article.findById(id);
  21. }
  22. // Delete a Note /art/
  23. @DeleteMapping(value = "/{id}")
  24. public void deleteArticle(@PathVariable("id") int id) {
  25. article.delete(id);
  26. }
  27. @PutMapping
  28. public Article update(Article user){
  29. return article.update(user);
  30. }
  31. }


In the picture you can see that it creates my json object but when i'm adding it to the database it only adds null values.
附加信息:我可以从数据库中获取数据,也可以从数据库中删除数据。
顺便说一句,这是我的第一个帖子,所以我很抱歉,如果我错过了一些张贴指南。提前感谢你的答案。有一个好的!

nom7f22z

nom7f22z1#

@RestController是一个方便的注解,它只不过添加了**@Controller@ResponseBody**注解,并允许类接受发送到其路径的请求
@DOCS

@ResponseBody annotation告诉控制器返回的对象会自动序列化为JSON并传递回HttpResponse对象。
@RequestBody注解将HttpRequest主体Map到传输或域对象,从而实现将入站HttpRequest主体自动化为Java对象。
你错过了@RequestBody
@RequestBody标记文章输入是从POST请求的主体/内容中检索的。这是GETPOST之间的一个显著差异,因为GET请求不包含主体。

修改代码

  1. @PostMapping
  2. public Article createArticle(@RequestBody Article art) {
  3. return article.create(art);
  4. }

字符串

展开查看全部
inb24sb2

inb24sb22#

由于命名的原因,你也会看到这样奇怪的东西。我认为JPA假设像my_Stuff这样的名字是my_Stuff。
所以我总是在完成构建控制器后使用Postman来测试帖子或获取。
当Postman返回原始JSON时,请注意所有属性的命名,因为大小写很重要。

相关问题