content negotiation for json response