我不熟悉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 ???;
}
答案 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();
自定义响应标头和其他类似的东西也可以使用该返回类型,但我认为这不符合“最佳实践”。
答案 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,但从经验来看,我认为以前的解决方案更灵活,更容易理解。