Я пытаюсь сделать общий REST API с помощью Джерси и я последовал следующий блог для этого: https://theza.ch/2009/08/11/uri-extensions-in-jersey/URI расширения в Джерси (.xml, .json)
Так что же происходит, что сервер работает отлично, когда я использую .xml в своем URL-адресе, и когда я использую .json, он дает ошибку внутреннего сервера 500. Я пробовал разные вещи, но безрезультатно. Может ли кто-нибудь по каким-либо изменениям узнать, почему это происходит в json, а не для xml и как это исправить?
Мой код выглядит примерно так:
@GET
@Path("/order/{product-key}/getorderid")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getOrderIdByDomain(@Context HttpServletRequest request,
@PathParam("product-key") final String productKey,
@QueryParam("domain-name") final String domainName) throws Exception
{
try
{
Integer response = doSomething();
return Response.status(200).entity(response).build();
}
catch (Exception lbe)
{
Hashtable response = new Hashtable();
response.put("Error",lbe.getMessage());
return Response.status(400).entity(response).build();
}
}
UPDATE:
После добавления Джерси-зависимость JSON, то 500 ошибка изменяется на 200 OK, но я все еще получаю пустой ответ. Для xml я получаю ожидаемый ответ. Кто-то сталкивался с подобной проблемой? Пожалуйста, предложите что-то, потому что я попробовал несколько вещей из других ответов, но он, похоже, не работает.
StackTrace:
Caused by: java.lang.AbstractMethodError
at org.codehaus.jackson.map.AnnotationIntrospector$Pair.findSerializer(AnnotationIntrospector.java:1148)
at org.codehaus.jackson.map.ser.BasicSerializerFactory.findSerializerFromAnnotation(BasicSerializerFactory.java:362)
at org.codehaus.jackson.map.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:252)
at org.codehaus.jackson.map.ser.StdSerializerProvider._createUntypedSerializer(StdSerializerProvider.java:782)
at org.codehaus.jackson.map.ser.StdSerializerProvider._createAndCacheUntypedSerializer(StdSerializerProvider.java:735)
at org.codehaus.jackson.map.ser.StdSerializerProvider.findValueSerializer(StdSerializerProvider.java:344)
at org.codehaus.jackson.map.ser.StdSerializerProvider.findTypedValueSerializer(StdSerializerProvider.java:420)
at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:601)
at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:256)
at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:1606)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.writeTo(JacksonJsonProvider.java:520)
at com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.writeTo(JacksonProviderProxy.java:160)
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1437)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
... 48 more
Я использую следующие зависимости: джерси-сервера, джерси-версия 1.8 JSON.
Я думаю, что вам не хватает некоторой зависимости от джексона, обратитесь к этому и включите его в свой проект. Http://stackoverflow.com/questions/18429468/correct-set-of-dependencies-for-using-jackson-mapper –
Could вы делитесь с нами трассировкой стека исключений? – Robertiano
Это учебное пособие почти 7 лет, и оно основано на * старом * Джерси 1.x. Вы что-то делаете * new *? Вы когда-нибудь рассматривали использование Jersey 2.x? –