POST方法的Spring 405错误

时间:2013-10-22 08:17:09

标签: spring spring-security

我正在尝试按照网络指南使用Spring安全保护我的网站。我不希望我的用户通过Web浏览器使用我的应用程序,因此我禁用了csrf保护。服务器端的源代码:

    @Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
implements ApplicationContextAware {

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests().anyRequest().authenticated().and()
        .httpBasic().and()
        .csrf().disable();
    }

@Override
protected void registerAuthentication(AuthenticationManagerBuilde r authManagerBuilder) throws Exception {
authManagerBuilder.inMemoryAuthentication()
.withUser("user").password("password").roles("ADMI N");
}
}

@Controller
//@RequestMapping("/course")
public class CourseController implements ApplicationContextAware{

@RequestMapping(value="/course", method = RequestMethod.GET, produces="application/json")
public @ResponseBody List<Course> get(// The critirion used to find.
@RequestParam(value="what", required=true) String what,
@RequestParam(value="value", required=true) String value) {
//.....
}

@RequestMapping(value="/course", method = RequestMethod.POST, produces="application/json")
public List<Course> upload(@RequestBody Course[] cs) {
}
}

我在客户端使用RestTemplate。问题是,当我使用POST方法时,我在服务器端进行了警告:         o.s.web.servlet.PageNotFound:不支持请求方法'POST'

在客户端,我得到了:         线程“main”中的异常org.springframework.web.client.HttpClientErrorException:405方法不允许

奇怪的是我得到了这个异常,因为我已经在Controller中处理了POST方法。目前,该系统仍然有效,但这个问题困扰我。 任何的想法? 感谢。

2 个答案:

答案 0 :(得分:5)

最后,我发现了什么是错的。希望这对其他人有帮助。 这个错误非常愚蠢。 upload()的返回值应该使用@ResponseBody,因为我想直接返回课程。

@RequestMapping(value="/course", method = RequestMethod.POST, produces="application/json")
public @ResponseBody List<Course> upload(@RequestBody Course[] cs) {
}

答案 1 :(得分:0)

不确定,但尝试设置这两种方法:

@RequestMapping(value="/course", method = { RequestMethod.GET, RequestMethod.POST } produces="application/json")
public @ResponseBody List<Course> get(// The critirion used to find.
@RequestParam(value="what", required=true) String what,
@RequestParam(value="value", required=true) String value) {
//.....
}

@RequestMapping(value="/course", method = { RequestMethod.GET, RequestMethod.POST } , produces="application/json")
public List<Course> upload(@RequestBody Course[] cs) {
}