Java 接受GET时未接受POST resquest

Java 接受GET时未接受POST resquest,java,angularjs,spring,http,spring-mvc,Java,Angularjs,Spring,Http,Spring Mvc,我试图在spring controller中从angularjs发出http调用并发布json数据,但我在angularjs中遇到了以下错误: angular.js:10661 POST http://localhost:8080/shopng/product/add 404 (Not Found) (anonymous) @ angular.js:10661 sendReq @ angular.js:10480 serverRequest @ angular.js:10187 process

我试图在spring controller中从angularjs发出http调用并发布json数据,但我在angularjs中遇到了以下错误:

angular.js:10661 POST http://localhost:8080/shopng/product/add 404 (Not 
Found)
(anonymous) @ angular.js:10661
sendReq @ angular.js:10480
serverRequest @ angular.js:10187
processQueue @ angular.js:14634
(anonymous) @ angular.js:14650
$eval @ angular.js:15916
$digest @ angular.js:15727
$apply @ angular.js:16024
(anonymous) @ angular.js:23416
eventHandler @ angular.js:3293
product_service.js:35 Error while adding product
product_controller.js:30 {productName: "ads", productPrice: 34, description: "ads", imageUrl: "asd"}
但当我使用GET请求时,它并没有给我任何错误,但它表示媒体类型不受支持,当我删除媒体类型并执行该操作时,数据库中会添加“NULL”值

这是我的RestController:

@RestController
@RequestMapping("/product")
public class ProductRestController {
@Autowired
ProductDao productDao;
//Add Product

 @RequestMapping(value = "/add", method= RequestMethod.POST, consumes="application/json")
    public ResponseEntity<Void> createProduct(@ModelAttribute("product") Product product) {
        System.out.println("Creating Product " + product.getProductName());

        if (productDao.isProductExit(product)) {
            System.out.println("A Product with name " + product.getProductName() + " already exist");
            return new ResponseEntity<Void>(HttpStatus.CONFLICT);
        }

       productDao.add(product);

       return new ResponseEntity<Void>(HttpStatus.CREATED);
    }
以下是我对该项目的github回购协议:
任何帮助都将不胜感激。

控制器中的属性不正确。它应该以/开头。请在控制器中更改为/添加

//Add Product

 @RequestMapping(value = "/add", method= RequestMethod.POST, consumes="application/json")
    public ResponseEntity<Void> createProduct(@ModelAttribute("product") Product product) {
        System.out.println("Creating Product " + product.getProductName());

        if (productDao.isProductExit(product)) {
            System.out.println("A Product with name " + product.getProductName() + " already exist");
            return new ResponseEntity<Void>(HttpStatus.CONFLICT);
        }

       productDao.add(product);

       return new ResponseEntity<Void>(HttpStatus.CREATED);
    }
//添加产品
@RequestMapping(value=“/add”,method=RequestMethod.POST,consumes=“application/json”)
公共响应性createProduct(@ModelAttribute(“产品”)产品){
System.out.println(“创建产品”+Product.getProductName());
if(productDao.isProductExit(产品)){
System.out.println(“名为“+Product.getProductName()+”的产品已存在”);
返回新的ResponseEntity(HttpStatus.CONFLICT);
}
productDao.add(产品);
返回新的ResponseEntity(HttpStatus.CREATED);
}

试试这样的方法。添加RequestBody而不是ModelAttribute

@RequestMapping(value = "/add", method= RequestMethod.POST, consumes="application/json")
    public ResponseEntity<Void> createProduct(@RequestBody  Product product) {
        System.out.println("Creating Product " + product.getProductName());

        if (productDao.isProductExit(product)) {
            System.out.println("A Product with name " + product.getProductName() + " already exist");
            return new ResponseEntity<Void>(HttpStatus.CONFLICT);
        }

       productDao.add(product);

       return new ResponseEntity<Void>(HttpStatus.CREATED);
    }
@RequestMapping(value=“/add”,method=RequestMethod.POST,consumes=“application/json”)
公共响应性createProduct(@RequestBody产品){
System.out.println(“创建产品”+Product.getProductName());
if(productDao.isProductExit(产品)){
System.out.println(“名为“+Product.getProductName()+”的产品已存在”);
返回新的ResponseEntity(HttpStatus.CONFLICT);
}
productDao.add(产品);
返回新的ResponseEntity(HttpStatus.CREATED);
}

我已经浏览了您的securityconfig课程

请按以下方式禁用csrf

http.authorizeRequests().antMatchers("/admin/**")
    .access("hasRole('ROLE_ADMIN')").and().formLogin()
    .loginPage("/login").failureUrl("/login?error")
    .usernameParameter("username")
    .passwordParameter("password")  
    .and().logout().logoutSuccessUrl("/login?logout")
    .and().csrf().disable();
    //.and().exceptionHandling().accessDeniedPage("/403");
您将获得404-因为csrf检查引发异常。要处理该异常,您尚未添加异常处理程序。因此找不到404 means-exception处理程序,而不是post请求本身

如果您需要使用csrf进行安全保护,请记住随请求一起发送csrf令牌

请参阅以下附件,并获得成功回复


更新的代码

您确定映射正确吗?你可以在类上发布完整的控制器,包括请求映射。这个问题与spring boot有关,而不是angularjs。@IndraneelBende感谢你的回答,是的,映射是正确的。我已经发布了同样的问题,我将与你分享链接,你可以看看所有的价值观@IndraneelBende这是同一个问题,只是servlet是不同的,即本例中的“localhost:8080/shopping”,在这里是“localhost:8080/shopping”,在该示例中,我看不出您在rest控制器中添加/shopping或/shopping的位置。我也更改为该位置。非常感谢,我花了3天的时间,现在它开始工作了
http.authorizeRequests().antMatchers("/admin/**")
    .access("hasRole('ROLE_ADMIN')").and().formLogin()
    .loginPage("/login").failureUrl("/login?error")
    .usernameParameter("username")
    .passwordParameter("password")  
    .and().logout().logoutSuccessUrl("/login?logout")
    .and().csrf().disable();
    //.and().exceptionHandling().accessDeniedPage("/403");