开发者

Jersey doesn't unmarshall Java generic type

开发者 https://www.devze.com 2023-03-08 23:07 出处:网络
I would like to have a service that answers to POST requests on /contact with the following payload: {\"records\":[{\"firstname\":\"John\",\"lastname\":\"Doe\"}]}

I would like to have a service that answers to POST requests on /contact with the following payload:

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

Ideally, records should be a wrapper for all sorts of types: Contact, Order, etc. That's why I would like to use a generic type, but Jersey doesn't seem to be able to unmarshall it. Here's my code:

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

@Autowired
private ContactService contactService;

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<Contact> saveConta开发者_StackOverflow中文版ct(final Records<Contact> contact) {
    return Arrays.asList(contactService.saveContact(contact.records.get(0)));
}
}


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

It seems that using a custom javax.ws.rs.ext.MessageBodyReader could solve my problem. Correct?


It looks like you are using natural JSON Encoding - to be able to process it, you should configure Jersey as described here.

In some @PostConstruct in one of your singleton beans used for configuration, include the following call:

JSONConfiguration.natural().build();
0

精彩评论

暂无评论...
验证码 换一张
取 消