web-dev-qa-db-fra.com

spring Boot - Comment éviter "Impossible d'instancier [Java.util.List]: La classe spécifiée est une interface" dans le gestionnaire de contrôleur HTTP

Dans mon API REST d'amorçage printanier, je dois gérer HTTP POST en acceptant une liste fortement typée en tant qu'entrée:

@RestController
public class CusttableController {

    static final Logger LOG = LoggerFactory.getLogger(CusttableController.class);

    @RequestMapping(value="/custtable/update", method=RequestMethod.POST)
    @ResponseBody
    public String updateCusttableRecords(List<Custtable> customers) {
        try {
                for (Custtable cust : customers) {

                Custtable customer = (Custtable) custtableDao.getById(Custtable.class, 
                        new CusttableCompositeKey 
                        (cust.getAccountnum(),cust.getPartition(),cust.getDataareaid()));

Dans la version Jersey de cette API, cela fonctionnait très bien, mais avec Spring Boot, cela me donne cette erreur:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [Java.util.List]: Specified class is an interface

Quelle est la bonne façon pour moi d’accepter une liste fortement typée dans Spring Boot?

12
Eugene Goldberg

Essayez d'ajouter RequestBody annotation à la définition de votre méthode

@RequestMapping(value="/custtable/update", method=RequestMethod.POST)
@ResponseBody
public String updateCusttableRecords(@RequestBody List<Custtable> customers) {
    //Method body 
}
25
Egor Lyashenko

Pour moi, j'avais fait une faute de frappe en enveloppant accidentellement une classe dans une liste . Supprimer cette faute de frappe permettait à la sérialisation de se dérouler correctement via spring data rest + jackson.

List<MyClass> a; // typo
MyClass = a;// fix
0
Miguel Pereira