Eu tenho um método que é anotado da seguinte maneira:
/**
* Provide a list of all accounts.
*/
// TODO 02: Complete this method. Add annotations to respond
// to GET /accounts and return a List<Account> to be converted.
// Save your work and restart the server. You should get JSON results when accessing
// http://localhost:8080/rest-ws/app/accounts
@RequestMapping(value="/orders", method=RequestMethod.GET)
public @ResponseBody List<Account> accountSummary() {
return accountManager.getAllAccounts();
}
Então eu sei que por esta anotação:
@RequestMapping(value="/orders", method=RequestMethod.GET)
este método manipula solicitações GET HTTP feitas ao recurso representado pela URL / pedidos .
Este método chama um objeto DAO que retorna uma Lista .
onde Conta representa um usuário no sistema e tem alguns campos que representam esse usuário, como:
public class Account {
@Id
@Column(name = "ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long entityId;
@Column(name = "NUMBER")
private String number;
@Column(name = "NAME")
private String name;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "ACCOUNT_ID")
private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>();
...............................
...............................
...............................
}
Minha pergunta é: como exatamente funciona a @ResponseBody
anotação?
Ele está situado antes do List<Account>
objeto retornado, então acho que se refere a esta Lista. A documentação do curso afirma que esta anotação tem a função de:
certifique-se de que o resultado será gravado na resposta HTTP por um conversor de mensagem HTTP (em vez de uma visualização MVC).
E também lendo sobre a documentação oficial do Spring: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ResponseBody.html
parece que pega o List<Account>
objeto e o coloca no Http Response
. Isso é correto ou estou entendendo mal?
Escrito no comentário do accountSummary()
método anterior , há:
Você deve obter resultados JSON ao acessar http: // localhost: 8080 / rest-ws / app / accounts
Então, o que exatamente isso significa? Isso significa que o List<Account>
objeto retornado pelo accountSummary()
método é automaticamente convertido para o JSON
formato e, em seguida, colocado no Http Response
? Ou o que?
Se esta afirmação for verdadeira, onde é especificado que o objeto será convertido automaticamente para o JSON
formato? O formato padrão é adotado quando a @ResponseBody
anotação é usada ou é especificado em outro lugar?