Запрос POST не принят, пока принимается GET - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь сделать http-вызов из angularjs в Spring Controller и опубликовать данные 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);
    }

Вот мойЗапрос на предоставление услуг angular:

function addProduct(product){
    var deferred = $q.defer();
    $http.post('http://localhost:8080/shopng/product/add', product)
        .then(
           function(response){
               deferred.resolve(response.data);
           },
           function(errResponse){
               console.log('Error while adding product');
               deferred.reject(errResponse);
           }

        );
    return deferred.promise;
 }

вот мое репозиторий github проекта: https://github.com/Bk073/Shopping Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Попробуйте что-нибудь подобное.Добавьте 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);
    }
0 голосов
/ 05 июня 2018

Я прошел ваш класс 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 означает - обработчик исключений не найден, а не сам запрос на отправку.

Если вам необходимо обеспечить безопасность с помощью csrf, имейте в виду, что отправьте токен csrf вместе с запросом.

приведенное ниже приложение с успешным ответом.

enter image description here

обновленный код https://github.com/supun/Shopping

0 голосов
/ 04 июня 2018

Свойство value в вашем контроллере неверно.Он должен начинаться с / .Пожалуйста, измените на / добавьте в вашем контроллере

//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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...