java - Spring Boot + Angular 5 - http.post 空值
问题描述
我正在开发一个项目客户端/服务器,我正在使用 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>
我要添加的文章的模型类:
export class Article {
id: string;
title: string;
abstract_art: string;
writer: string;
body: string;
}
我要添加的组件:
@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);
}
}
现在是后端。文章类
@Entity
@Getter @Setter
@NoArgsConstructor
@ToString @EqualsAndHashCode
@Table(name="article")
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name="title")
private String title;
@Column(name="abstract_art")
private String abstract_art;
@Column(name="writer")
private String writer;
@Column(name="body")
private String body;
public Article(String title,String abstract_art, String writer, String body) {
this.title = title;
this.body = body;
this.abstract_art = abstract_art;
this.writer = writer;
}
}
存储库:
@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);
}
}
在图片中,您可以看到它创建了我的 json 对象,但是当我将它添加到数据库时,它只添加空值。
附加信息:我可以从数据库中获取数据,也可以从数据库中删除数据。
顺便说一句,这是我的第一篇文章,所以如果我错过了一些发帖指南,我很抱歉。预先感谢您的回答。祝你有个好的一天!
解决方案
@RestController是一个方便的注解,它除了添加@Controller和@ResponseBody注解外,还允许类接受发送到其路径的请求
@DOCS
@ResponseBody
注释告诉控制器返回的对象自动序列化为 JSON 并传递回 HttpResponse 对象。
@RequestBody
注释将 HttpRequest 主体映射到传输或域对象,从而将入站 HttpRequest 主体自动反序列化到 Java 对象上。
您错过@RequestBody
@RequestBody
了从 POST 请求的正文/内容中检索文章输入的标记。这是一个显着的区别GET
,POST
因为GET
请求不包含正文。
修改后的代码
@PostMapping
public Article createArticle(@RequestBody Article art) {
return article.create(art);
}
推荐阅读
- heroku - Heroku 电话号码附加验证插件
- docker-compose - 在 docker-compose 中运行 Konga 时出现身份验证错误
- react-native - 我正在使用 React Native html 渲染,React Native webview 所有这些都抛出相同的错误。维度没有定义?
- javascript - 如何将映射元素添加到状态 onClick?
- javascript - 如何根据用户文本输入在我的网站上生成图像?
- python - 为什么我的“非常简单”的爬虫 CrawlSpider 无法连接到任何页面?
- flutter - 切换按钮的背景颜色
- google-apps-script - 是否有逆时针计算未读电子邮件的代码?
- python - 使用带有参数的 url_for 进行烧瓶重定向
- python - Python:如何根据查询中的文件日期通过“pyodbc.connect”或其他方式从一个数据库切换到另一个数据库?