英文:
How to POST with Postman to an API in Java?
问题
我尝试创建一个小的API来进行测试,我的Java代码似乎没问题,在Postman中,当我想要进行GET请求来获取我的产品列表时,一切都正常,但当我想要进行POST请求时,出现了400 Bad Request错误。
这是我的代码:
// 产品列表
@GetMapping(value = "/Produits")
public List<Product> listeProduits() {
return productDao.findAll();
}
// 通过ID获取产品
@GetMapping(value = "/Produits/{id}")
public Product afficherUnProduit(@PathVariable int id) {
return productDao.findById(id);
}
@PostMapping(value = "/Produits/")
public void ajouterProduit(@RequestBody @Validated Product product, final HttpServletRequest request, Error filterError) {
productDao.save(product);
}
在Postman中,在请求的Body部分,我已经设置了Content-Type为application/json。
这个问题可能来自哪里?
谢谢。
英文:
I tried to create a small API to do tests, my Java code seems OK, with Postman when I want to do a GET my list of products is fine for me, on the other hand when I want to do a POST, I have a 400 Bad Request.
Here is my code:
// Produits
@GetMapping(value = "/Produits")
public List<Product> listeProduits() {
return productDao.findAll();
}
// Récupère un produit par son ID
@GetMapping(value = "/Produits/{id}")
public Product afficherUnProduit(@PathVariable int id) {
return productDao.findById (id);
}
@PostMapping(value = "Produits/")
public void ajouterProduit(@RequestBody @Validated Product product, final HttpServletRequest request, Error filterError) {
productDao.save(product);
}
In Postman, in my body I have the content-type: application / json of filled in.
Where can this problem come from?
Thanks
答案1
得分: 1
我查看了你的项目。一切都正常工作。但是你的“POST”网址有问题 - “/Produits/” <--- 最后的斜杠可能是长时间不理解和“为什么这不起作用!!”的原因。因为在Postman中,你也必须调用网址 - "localhost:8080/Produits/" <--- 这里也需要最后的斜杠。
我启动了你的项目,并且使用Postman的这个设置可以正常工作(下面是图片)。请仔细查看,每个符号都可能是原因。
在POST和保存之后,我可以通过GET方法获取实体。
英文:
I looked at you project. Everything is working ok.
But you have "bad" POST url - "/Produits/" <--- last slash can be reason for the long not-understanding and "Why this is not working!!". Because in Postman you also must call url -> "localhost:8080/Produits/" <-- here also need last slash.
I've started your project and it works well with this setting of Postman (picrures below). Please look carefully, every symbol is might be a reason.
After POST and save I was able to get entity through GET method
答案2
得分: 0
我尝试重现获得400错误请求,但失败了。
根据您的代码,我可以访问以下地址(您可以尝试这个):
localhost:8080/Produits/
但是
localhost:8080/Produits
返回404未找到。
也许您可以添加更多信息,这可能会有所帮助。谢谢。
英文:
I tried to reproduce getting 400 bad request, but I failed.
Based on your code, I can access to (you might try this)
localhost:8080/Produits/
but
localhost:8080/Produits
returned 404 not found.
Maybe you can add more information, which might be helpful. Thanks.
答案3
得分: 0
400 是坏请求。也许您发送了错误的 POST 请求,而不是 GET 请求。因为只有 "ajouterProduit" 方法有验证。
另外,请检查您的 URL,如果您的 Postman 设置了 "Produits/",请在 Postman 中设置相同的 URL:
http://localhost:8080/Produits/
如果您使用 Linux 或 Mac,您可以通过 curl 检查您的服务:
curl http://localhost:8080/Produits/
这将帮助您理解,您是在发送错误的 Postman 请求,还是服务的 URL 有些不同,或者其他原因。
英文:
400 is Bad request. Maybe you do wrong POST request instead GET. Because only "ajouterProduit" method has validation.
Also yeah check your url- if you have "Produits/" set the same in Postman
http://localhost:8080/Produits/
And you can check you service through curl if you has Linux or Mac:
curl http://localhost:8080/Produits/
It will help you understand - you doing wrong Postman request or service has some different url or something
答案4
得分: 0
以下是要翻译的代码部分:
@Override
public List<Product> findAll() {
return products;
}
@Override
public Product findById(int id) {
for (Product product : products) {
if (product.getId() == id) {
return product;
}
}
return null;
}
@Override
public Product save(Product product) {
products.add(product);
return product;
}
和 Postman 屏幕截图部分的描述:
英文:
And more code :
@Override
public List<Product> findAll () {
return products;
}
@Override
public Product findById (int id) {
for (Product product : products) {
if (product.getId () == id) {
return product;
}
}
return null;
}
@Override
public Product save (Product product) {
products.add(product);
return product;
}
And Postman screen :
答案5
得分: 0
以下是翻译好的部分:
// 产品类
public class Product {
private int id;
private String nom;
private int prix;
private int dureeDeVie;
public Product() {
}
public Product(int id, String nom, int prix, int dureeDeVie) {
this.id = id;
this.nom = nom;
this.prix = prix;
this.dureeDeVie = dureeDeVie;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getPrix() {
return prix;
}
public void setPrix(int prix) {
this.prix = prix;
}
public int getDureeDeVie() {
return dureeDeVie;
}
public void setDureeDeVie(int dureeDeVie) {
this.dureeDeVie = dureeDeVie;
}
@Override
public String toString() {
return "Product{" +
"id=" + id +
", nom='" + nom + '\'' +
", prix=" + prix +
", dureeDeVie=" + dureeDeVie +
'}';
}
}
英文:
The Product Class :
public class Product {
private int id;
private String nom;
private int prix;
private int dureeDeVie;
public Product() {
}
public Product (int id, String nom, int prix, int dureeDeVie) {
this.id = id;
this.nom = nom;
this.prix = prix;
this.dureeDeVie = dureeDeVie;
}
public int getId () {
return id;
}
public void setId (int id) {
this.id = id;
}
public String getNom () {
return nom;
}
public void setNom (String nom) {
this.nom = nom;
}
public int getPrix () {
return prix;
}
public void setPrix (int prix) {
this.prix = prix;
}
public int getDureeDeVie () {
return dureeDeVie;
}
public void setDureeDeVie (int dureeDeVie) {
this.dureeDeVie = dureeDeVie;
}
@Override
public String toString () {
return "Product{" +
"id=" + id +
", nom='" + nom + '\'' +
", prix=" + prix +
", dureeDeVie=" + dureeDeVie +
'}';
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论