静态Web服务的PUT和POST获取405方法不允许错误

我试图建立一个简单的Restful Web服务,该服务根据Accept标头返回JSON或XML。我正在使用Spring,Maven和WebLogic

Server。我从这篇文章http://software.sawano.se/2012/03/combining-json-and-xml-in-

restful-web.html中获取了示例,并尝试对其进行改进。GET和DELETE都适用于JSON和XML。但是PUT和POST给出“

405不允许的方法”错误。我正在尝试使用Chrome Extension Advanced Rest Client对此进行测试。下面是Response标头。

Status

405 Method Not Allowed Show explanation Loading time: 327

Request headers

Accept: Application/json

Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip,deflate,sdch

Accept-Language: en-US,en;q=0.8

Response headers

Connection: close

Date: Tue, 11 Feb 2014 15:17:24 GMT

Content-Length: 34

Content-Type: text/html

Allow: GET, DELETE

X-Powered-By: Servlet/2.5 JSP/2.1

Raw

Parsed

我给的请求正文如下:

{

id: 1

name: "manga"

}

我的控制器类如下所示:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.http.HttpStatus;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.*;

import java.util.HashSet;

import java.util.Set;

@Controller

@RequestMapping("/users")

public class RESTController {

Userlist obj2;

boolean flag=false;

private Logger logger = LoggerFactory.getLogger(getClass());

@RequestMapping(value = "/{id}",method = RequestMethod.GET)

@ResponseBody

public User getUser(@PathVariable int id, @RequestHeader("Accept") String acceptHeader) {

User temp = new User();

if(obj2==null)

{

temp= new User(0, "Null");

}

else {

Set<User> set1= obj2.getUsers();

for(User a:set1)

{

if(id==a.getId()) temp=a;

}

}

logger.trace("Serving resource for Accept header: {}", acceptHeader);

return temp;

}

@RequestMapping(value="",method = RequestMethod.GET)

@ResponseBody

public Userlist getUsers(){

if(flag==false){

User new1=new User(1,"Rob");

User new2=new User(2,"VAN");

User new3=new User(3,"DAM");

User new4=new User(4,"Helio");

Set<User> obj1 =new HashSet<User>();

obj1.add(new1);

obj1.add(new2);

obj1.add(new3);

obj1.add(new4);

obj2=new Userlist(obj1);

flag=true;

}

return obj2;

}

@RequestMapping(value="/{id}",method = RequestMethod.DELETE)

@ResponseStatus(HttpStatus.OK)

public void deleteUser(@PathVariable int id){

Set<User> set1= obj2.getUsers();

for(User a:set1)

{

if(id==a.getId()) set1.remove(a);

}

Userlist obj3=new Userlist(set1);

obj2=obj3;

//return obj3;

}

@RequestMapping(value="/{id}",method = RequestMethod.PUT, consumes = "Application/json")

@ResponseStatus(HttpStatus.OK)

public void updateUser(@PathVariable int id, @RequestBody User temp){

System.out.println("Inside the put function");

if(temp==null){System.out.println("This is a Null for PUT");}

}

}

目前,我在PUT中没有任何内容。

回答:

好吧,显然我不得不更改我的PUT调用函数updateUser。我删除了@Consumes@RequestMapping并且还向@ResponseBody函数添加了一个。所以我的方法看起来像这样:

@RequestMapping(value="/{id}",method = RequestMethod.PUT)

@ResponseStatus(HttpStatus.OK)

@ResponseBody

public void updateUser(@PathVariable int id, @RequestBody User temp){

Set<User> set1= obj2.getUsers();

for(User a:set1)

{

if(id==a.getId())

{

set1.remove(a);

a.setId(temp.getId());

a.setName(temp.getName());

set1.add(a);

}

}

Userlist obj3=new Userlist(set1);

obj2=obj3;

}

而且有效!!!谢谢大家的答复。

以上是 静态Web服务的PUT和POST获取405方法不允许错误 的全部内容, 来源链接: utcz.com/qa/418558.html

回到顶部