2016-04-25 143 views
0

家伙的问题是,我发现了错误请求方法“POST”不支持弹簧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应用邮差如下:

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

我会感谢您的帮助!

+0

任何帮助吗? – Sofiane

回答

0

我已经添加了控制器的版本是正确的,但它只能当我在安全配置类屁股禁用CRSF如下:

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 
    } 
} 
0

伙计们我完全搞错了我已经控制了控制器的方式。

所以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。

相关问题