#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();