2016-04-25 57 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。

相關問題