Spring 3 RESTful返回POST(创建)

时间:2012-03-24 15:10:05

标签: spring rest

我不熟悉RESTful服务及其在Spring 3上的实现。我希望您在客户端在我的服务器中创建新资源时返回类型的最佳实践。

@RequestMapping(method = RequestMethod.POST, 
value = "/organisation", 
headers = "content-type=application/xml")
@ResponseStatus(HttpStatus.CREATED)
public ??? createOrganisation(@RequestBody String xml) 
{
    StreamSource source = new StreamSource(new StringReader(xml));
    Organisation organisation = (Organisation) castorMarshaller.unmarshal(source);
    // save 
    return ???;
}

3 个答案:

答案 0 :(得分:0)

一个简单的选择是 javax.ws.rs.core.Response ,可以在Java EE自己的restful services包中找到。它 - 简单地 - 告诉Web服务器应该回复HTTP请求。 例如:

if (organisation != null)
  return Response.ok().build();
else
  return Response.serverError().build();

自定义响应标头和其他类似的东西也可以使用该返回类型,但我认为这不符合“最佳实践”。


呃,我错过了@ResponseStatus(HttpStatus.CREATED)......我想我的答案没多大帮助。

也许这会有所帮助:How to return generated ID in RESTful POST?

答案 1 :(得分:0)

最好将包含在ResponseEntity中的新创建的实体(包含生成的id)返回。您还可以根据操作结果在ResponseEntity中设置HttpStatus。

     @RequestMapping(method = RequestMethod.POST, 
         value   = "/organization", 
         headers = "content-type=application/xml")
     public ResponseEntity<Organization> createOrganisation(@RequestBody String xml) {
            StreamSource source = new StreamSource(new StringReader(xml));
            Organization organisation = (Organization) castorMarshaller.unmarshal(source);
            // save 
            return new ResponseEntity<Organization>(organization, HttpStatus.OK);
        }

答案 2 :(得分:0)

我会选择ResponseEntity<byte[]>,你会在你的控制器方法上处理你的响应的编组。请注意,你基本上是在MVC中删除V,在Spring上有一个MarshallingView,但从经验来看,我认为以前的解决方案更灵活,更容易理解。