Джерси не отменяет общий тип Java

#java #generics #jaxb #jersey

#java #общие типы #jaxb #джерси

Вопрос:

Я хотел бы иметь службу, которая отвечает на запросы POST в / contact со следующей полезной нагрузкой:

 {"records":[{"firstname":"John","lastname":"Doe"}]} 
  

В идеале записи должны быть оболочкой для всех типов: Contact, Order и т.д. Вот почему я хотел бы использовать общий тип, но Джерси, похоже, не может отменить его. Вот мой код:

 @Controller
@Path("/contact")
public class ContactResource {

@Autowired
private ContactService contactService;

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<Contact> saveContact(final Records<Contact> contact) {
    return Arrays.asList(contactService.saveContact(contact.records.get(0)));
}
}


@XmlRootElement
public class Records<T> {
    public List<T> records;
}
  

Похоже, что использование пользовательского javax.ws.rs.ext.MessageBodyReader могло бы решить мою проблему. Правильно?

Ответ №1:

Похоже, вы используете естественную кодировку JSON — чтобы иметь возможность обрабатывать ее, вы должны настроить Джерси, как описано здесь.

В некотором @PostConstruct в одном из ваших одноэлементных компонентов, используемых для настройки, включите следующий вызов:

 JSONConfiguration.natural().build();