2 votes

Le mappage par défaut de JSON en objet ne fonctionne pas

Je voudrais effectuer un POST d'un message JSON et je veux faire une conversion en objet employé. Le message JSON est {"employee":{"id":2231,"name":"jeffarry2231","niNumber":"SN10KTL"}} .

L'objet employé

public class Employee {
    private Long id;
    private String name;
    private String niNumber;
    ...
}

Le contrôleur d'employés

@Controller
public class EmployeeController {

   @RequestMapping(value = "/employee/add/", method = RequestMethod.POST)
    public void addEmployee(Employee employee){
       System.out.println(employee.getName());
    }
}

Le RestTemplate qui affiche la demande est

@Test
public void postMethod() {
    RestTemplate restTemplate = new RestTemplate();
    String jsonEmployee = "{'id':2231,'name':'jeffarry2231','niNumber':'SN10KTL'}}";

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(newArrayList(MediaType.APPLICATION_JSON));
    HttpEntity<String> requestEntity = new HttpEntity<String>(jsonEmployee, headers);
    restTemplate.exchange("http://localhost:8080/employee/add/", POST, requestEntity, String.class);
}

L'applicationContext.xml a

<mvc:annotation-driven/>

Je m'attends à ce que le convertisseur MappingJacksonHttpMessageConverter soit utilisé par défaut, mais il ne semble pas convertir, je ne suis pas sûr de ce que je manque ici !

3voto

nickdos Points 4757

Essayez d'ajouter le @RequestBody annotation :

@RequestMapping(value = "/employee/add/", method = RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
   System.out.println(employee.getName());
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X