请求方法 'POST' 不支持 spring 4

Request method 'POST' not supported spring 4

伙计们,问题是我遇到了错误

Request method 'POST' not supported

这是我的控制器:

package com.mintad.spring.controllers;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.mintad.common.beans.Gouvernorate;
import com.mintad.common.service.GouvernorateService;

@RestController
@RequestMapping("/data")
public class DataController {

    private static final Logger LOGGER = LogManager.getLogger(DataController.class);

    @Autowired
    private GouvernorateService gouvernorateService;

    @RequestMapping(value = "/gouvernorates", method = RequestMethod.GET, produces = { "application/json" })
    public ResponseEntity<List<Gouvernorate>> getGouvernorates() throws FileNotFoundException {
        return new ResponseEntity<List<Gouvernorate>>(gouvernorateService.findAll(), HttpStatus.OK);
    }

    @RequestMapping(value = "/addGouvernorate", method = RequestMethod.POST, produces = { "application/json" })
    public @ResponseBody ResponseEntity<Gouvernorate> addGouvernorate(BindingResult result, Model model, @RequestParam(name = "name") String name,
            @RequestParam(name = "delegation") String delegation, @RequestParam(name = "district") String district,
            @RequestParam(name = "postalCode") String postalCode) throws IOException {
        LOGGER.info("addGouvernorate called");
        Gouvernorate gouvernorate = new Gouvernorate(name, delegation, district, postalCode);
        gouvernorateService.addGouvernorat(gouvernorate);
        return new ResponseEntity<Gouvernorate>(gouvernorate, HttpStatus.OK);
    }

    @RequestMapping(value = "/addTest", method = RequestMethod.POST)
    public @ResponseBody String addTest(BindingResult result, Model model) {

        LOGGER.info("addGouvernorate called");
        Gouvernorate gouvernorate = new Gouvernorate("test", "test", "test", "test");
        gouvernorateService.addGouvernorat(gouvernorate);

        return "Your Professional Details Updated";

    }
}

我尝试了很多解决方案,但都是徒劳。

我正在使用 chrome Postman 应用程序如下调用控制器方法:

http://localhost:8080/mintad/data/addTest (POST)
http://localhost:8080/mintad/data/addGouvernorate?name=test&delegation=test&district=test&postalCode=test (POST too)

如有任何帮助,我将不胜感激!

伙计们,我对控制器的构想完全错了。

因此 addTest 方法被替换为以下内容:

@RequestMapping(value = "/gouv/", method = RequestMethod.POST)
    public ResponseEntity<String> addGouv(@RequestBody Gouvernorate gouv) {

        log("addGouv called");
        gouvernorateService.addGouvernorate(gouv);

        return new ResponseEntity<String>("User created", HttpStatus.CREATED);

    }

其中 gouvernorateService 是 autwired。

我添加的控制器版本是正确的,但只有当我在我的安全配置中禁用 crsf 时它才有效 class 屁股如下:

package com.mintad.spring.security;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;

@Configuration
@EnableWebSecurity
@ComponentScan
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    @Autowired
    @Qualifier("customUserDetailsService")
    UserDetailsService userDetailsService;

    @Autowired
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http.csrf().disable().
        authorizeRequests()
            .antMatchers("/", "/home","/data").permitAll()
            .and().formLogin().loginPage("/login")
            .defaultSuccessUrl("/welcome").usernameParameter("username").passwordParameter("password")
            .and().exceptionHandling().accessDeniedPage("/404");
        // @formatter:off
    }
}