2012-03-24 4 views
0

Я новичок в сервисах RESTful и их реализации на Spring 3. Мне бы хотелось, чтобы ваше мнение о лучших практиках возврата типа, когда клиент создает новый ресурс на моем сервере.Spring 3 RESTful return on POST (create)

@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

Простой выбор был бы javax.ws.rs.core.Response, найденный в собственном пакете успокоительные услуг в Java EE в. Он - просто - сообщает, что веб-сервер должен ответить на HTTP-запрос. Например:

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

Пользовательские заголовки ответов и другие экзотические вещи, как это возможно с этим типом возвращаемого значения, но я не думаю, что будет соответствовать «наилучшей практики».


эм, я пропустил что @ResponseStatus (HttpStatus.CREATED) ... Я думаю, что мой ответ был не очень помощи.

Может быть, это поможет вместо: How to return generated ID in RESTful POST?

+0

Эта помощь поможет http://stackoverflow.com/questions/12837907/what-to-return-if-spring-mvc-controller-method-doesnt-return-value – Xiangyu

0

Это хорошая идея, чтобы вернуть вновь созданный объект (с генерируемым идентификатором), завернутые в ResponseEntity. Вы также можете установить HttpStatus в ResponseEntity на основании результата операции.

 @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); 
     } 
0

Я хотел бы пойти на ResponseEntity<byte[]>, и вы бы заботиться о сортировочной вашего ответа на ваш метод контроллера. Обратите внимание, что вы в основном отказываетесь от V в MVC, MarshallingView весной, но из опыта я считаю, что предыдущее решение стало более гибким и понятным.