Java 弹簧靴&x2B;角度5-http.post空值

Java 弹簧靴&x2B;角度5-http.post空值,java,html,angular,hibernate,spring-boot,Java,Html,Angular,Hibernate,Spring Boot,我在一个项目客户机/服务器上工作,使用spring boot和angular 所以我有一个表单,我想从输入字段中获取数据并将其发送到后端,我的数据库(mySQL),但问题是它只在我的数据库中添加空字段。我使用了devglen的教程作为灵感,还使用了angular.io的一些教程 表单输入示例: <div class="form-group"> <label for="body">Body:</label> <input type=

我在一个项目客户机/服务器上工作,使用spring boot和angular

所以我有一个表单,我想从输入字段中获取数据并将其发送到后端,我的数据库(mySQL),但问题是它只在我的数据库中添加空字段。我使用了devglen的教程作为灵感,还使用了angular.io的一些教程

表单输入示例:

<div class="form-group">
      <label for="body">Body:</label>
      <input type="text"  class="form-control" id="body"
             [ngModel]="article?.body" (ngModelChange)="article.body = $event" name="body">
    </div> 
我要添加的组件:

@Component({
  selector: 'app-add',
  templateUrl: './add-article.component.html'
})



export class AddArticleComponent  {



   article: Article = new Article();
   writers: Writer[];

  constructor(private router: Router, private articleService: ArticleService) {

  }
  createArticle(): void {
    console.log(this.article);
    this.articleService.createArticle( this.article).subscribe( data => { alert('Article created successfully.');
    });
    console.log('function called!');
  }

  get diagnostic() { return JSON.stringify(this.article); }
}  
服务类别:

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json',
    'Authorization': 'my-auth-token'})
};

@Injectable()
export class ArticleService {

  constructor(private http: HttpClient) {}

   // private userUrl = 'http://localhost:8080/articles';
  private articleUrl = '/api';

  public getArticles() {
    return this.http.get<Article[]>(this.articleUrl);
  }

  public deleteArticle(article) {
    return this.http.delete(this.articleUrl + '/' + article.id, httpOptions);
  }

  public createArticle(article) {
    // const art = JSON.stringify(article);
    console.log(article);
    return this.http.post<Article>(this.articleUrl, article);
  }

}
存储库:

@RepositoryRestResource
//@CrossOrigin(origins = "http://localhost:4200")
public interface ArticleRepository extends JpaRepository<Article,Integer> {
}
@RepositoryRestResource
//@交叉原点(原点=”http://localhost:4200")
公共接口ArticleRepository扩展了JpaRepository

附加信息:我可以从数据库中获取数据,也可以从数据库中删除数据

顺便说一句,这是我的第一篇文章,所以如果我错过了一些发布指南,我很抱歉。 提前感谢您的回答。祝你过得愉快

是一种方便的注释,它只不过添加了注释,并允许类接受发送到其路径的请求


@ResponseBody
注释告诉控制器对象 返回的数据将自动序列化为JSON并传递回 HttpResponse对象

@RequestBody
注释将HttpRequest主体映射到传输或 域对象,启用入站数据的自动反序列化 HttpRequest主体到Java对象上。

您错过了
@RequestBody

@RequestBody
标记从POST请求的正文/内容检索文章输入。这是
GET
POST
之间的显著区别,因为
GET
请求不包含正文

修改代码

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

试试看
公共文章createArticle(@RequestBody Article art)
@Vikas hahaa它成功了!非常感谢你!但是我想如果我有“@RestController”注释,我就不必添加“@RequestBody”?@StefanMuresan
@RestController
注释是
@Controller
@ResponseBody
的缩写
@ResponseBody
只是确保返回类型应直接写入HTTP响应主体。因此,您需要使用
@RequestBody
注释将参数绑定到HTTP请求的主体。我已经回答了您的问号,如果它有助于感谢您@pulkit singhal的回答!!谢谢你@Vikas!!
@RepositoryRestResource
//@CrossOrigin(origins = "http://localhost:4200")
public interface ArticleRepository extends JpaRepository<Article,Integer> {
}
@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleRepository repository;

    @Override
    public Article create(Article article) {
        return repository.save(article);
    }

    @Override
    public Article delete(int id) {
        Article article = findById(id);
        if(article != null){
            repository.delete(article);
        }
        return article;
    }

    @Override
    public List<Article> findAll() {
        return repository.findAll();
    }

    @Override
    public Article findById(int id) {

        return repository.getOne(id);
    }

    @Override
    public Article update(Article art) {
        return null;
    }
}
@RestController
@RequestMapping({"/api"})
public class ArticleController {

   @Autowired
   private ArticleService article;

    //Get all articles
    @GetMapping
    public List<Article> listAll(){
        return article.findAll();
    }

    // Create a new Article
    //@PostMapping
    @PostMapping
    public Article createArticle(Article art) {
        return article.create(art);
    }

    // Get a Single Article
    @GetMapping(value="/{id}")
    public Article getArticleById(@PathVariable("id") int id ){
        return article.findById(id);
    }

    // Delete a Note           /art/

    @DeleteMapping(value = "/{id}")
    public void deleteArticle(@PathVariable("id") int id) {
        article.delete(id);
    }

    @PutMapping
    public Article update(Article user){
        return article.update(user);
    }
}
 @PostMapping
    public Article createArticle(@RequestBody Article art) {
        return article.create(art);
    }