Spring 3 RESTful возврат на POST (создать) - PullRequest
0 голосов
/ 24 марта 2012

Я новичок в службах 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 голосов
/ 28 марта 2012

Хорошей идеей будет вернуть вновь созданную сущность (с сгенерированным идентификатором), завернутую в 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 голосов
/ 28 марта 2012

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

0 голосов
/ 24 марта 2012

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

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

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


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

Может быть, это поможет вместо: Как вернуть сгенерированный идентификатор в RESTful POST?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...