Estou usando o jQuery $.getJSON()
para fazer chamadas assíncronas para o meu back-end simples do Spring MVC. A maioria dos métodos do controlador Spring é assim:
@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public @ResponseBody SomePOJO getSomeData(@ModelAttribute Widget widget,
@RequestParam("type") String type) {
return someDAO.getSomeData(widget, type);
}
Eu tenho as coisas configuradas para que cada controlador retorne o @ResponseBody
como JSON, que é o que o lado do cliente espera.
Mas o que acontece quando uma solicitação não deve retornar nenhum conteúdo para o lado do cliente? Posso ter:
@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public @ResponseBody void updateDataThatDoesntRequireClientToBeNotified(...) {
...
}
Caso contrário, qual é a sintaxe apropriada para usar aqui?
java
jquery
spring-mvc
IAmYourFaja
fonte
fonte
POST
dados.Respostas:
você pode retornar nulo e, em seguida, marcar o método com @ResponseStatus (value = HttpStatus.OK), não é necessário @ResponseBody
Somente os métodos get retornam uma implicação de código de status 200; todos os outros que você faz fazem uma de três coisas:
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
HttpEntity
instânciafonte
@ResponseStatus
e não deve. Simplesmente ter@ResponseBody
umvoid
manipulador é suficiente.Você pode simplesmente retornar um ResponseEntity com o cabeçalho apropriado:
fonte
ResponseEntity is a raw type. References to generic type ResponseEntity<T> should be parameterized
Você pode retornar o objeto "ResponseEntity". O uso do objeto "ResponseEntity" é muito conveniente no momento da construção do objeto de resposta (que contém o Corpo da Resposta e o Código de Status HTTP) e no momento da obtenção de informações do objeto de resposta.
Métodos como getHeaders (), getBody (), getContentType (), getStatusCode () etc facilitam muito o trabalho de ler o objeto ResponseEntity.
Você deve usar o objeto ResponseEntity com um código de status http 204 (Sem conteúdo), que é especificamente para especificar que a solicitação foi processada corretamente e que o corpo da resposta está intencionalmente em branco. O uso de códigos de status apropriados para transmitir as informações corretas é muito importante, especialmente se você estiver criando uma API que será usada por vários aplicativos clientes.
fonte
@ResponseStatus(HttpStatus.NO_CONTENT)
resolvidoXML Parsing Error: no root element found
para mim no navegadorSim, você pode usar @ResponseBody com o
void
tipo de retorno:fonte
Não há nada errado em retornar um nulo
@ResponseBody
e você devePOST
solicitar.Use códigos de status HTTP para definir erros nas rotinas do manipulador de exceções, pois outros estão mencionando o status de sucesso. Um método normal, como você tem, retornará um código de resposta
200
que é o que você deseja; qualquer manipulador de exceções poderá retornar um objeto de erro e um código diferente (ou seja500
).fonte
Mas à medida que seu sistema cresce em tamanho e funcionalidade ... acho que retornar sempre um json não é uma má idéia. É mais uma questão de arquitetura / "design em grande escala".
Você pode pensar em manter sempre um JSON com dois campos conhecidos: código e dados. Onde código é um código numérico que especifica o sucesso da operação a ser realizada e dados são quaisquer dados adicionais relacionados à operação / serviço solicitado.
Vamos lá, quando usamos um provedor de serviços de back-end, qualquer serviço pode ser verificado para ver se funcionou bem.
Então, eu permaneço, para não permitir que a primavera gerencie isso, expondo operações de retorno híbridas (alguns retornam dados e nada ...) .. instaed certifique-se de que seu servidor exponha uma interface mais homogênea. É mais simples no final do dia.
fonte
Aqui está o código de exemplo que eu fiz para um método assíncrono
Você não precisa retornar nada do seu método, tudo o que precisa para usar esta anotação, para que seu método retorne OK em todos os casos
fonte