嗨,我正在使用restlet从您的示例宠物存储API生成一个客户机和服务器。以下是我的步骤:
响应:
{"code":4,"type":"ok","message":"magic!"}run:启动内部HTTP客户端空
非处理实体(422) -服务器理解请求实体的内容类型,并且请求实体的语法是正确的,但是无法在org.restlet.engine.resource.ClientInvocationHandler.invoke(ClientInvocationHandler.java:326)的com.sun.agent上处理包含的指令。$Proxy5表示(未知源)在net.apispark.webapi.client.FindPetByTagsClientResource.represent(FindPetByTagsClientResource.java:22) at apipetstore.APIPetStore.main()由: org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:282):无法在org.restlet.service.ConverterService.toObject(ConverterService.java:229) at org.restlet.service.ConverterService.toObject(ConverterService.java:229) at org.restlet.resource.Resource.toObject(Resource.java:889) .4创建对象表示的原因: java.lang.IllegalArgumentException:序列化后的表示必须具有以下媒体类型: application /x序列化对象或此媒体类型:应用程序/x-java序列化对象+xml在org.restlet.representation.ObjectRepresentation.(ObjectRepresentation.java:221) at org.restlet.representation.ObjectRepresentation.(ObjectRepresentation.java:123) at org.restlet.representation.ObjectRepresentation.(ObjectRepresentation.java:104) at org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:279) 6再构建成功(总时间:0秒)
启动内部HTTP客户端
{"code":4,"type":"ok","message":"magic!"}我有什么办法解决这个问题吗?
发布于 2015-02-10 06:36:23
实际上,JAXRS服务器框架实际上是一个服务器框架;-)这意味着它实际上没有按照客户端发送正确的内容。如果您查看服务器代码,您总是可以看到以下内容:
public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List<String> tags)
throws NotFoundException {
// do some magic!
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}它不符合宠物物品的清单..。
在客户端,由于尝试使用带注释的接口,您得到了错误。他们自动尝试使用Restlet的内部转换器。它失败了,因为它需要一个Pet类型的对象,并且您收到了具有这种结构的东西:{"code":4,"type":"ok","message":"magic!"}。
总之,您需要做一些工作来调整服务器框架以返回正确的对象。下面是一个硬编码的解决方案来使您的客户端SDK工作:
@GET
@Path("/findByTags")
@ApiOperation(value = "Finds Pets by tags", notes = "Finds Pets by tags", response = Pet.class, responseContainer = "List")
@ApiResponses(value = {
@ApiResponse(code = 400, message = "") })
public Response findPetsByTags(@ApiParam(value = "Tags to filter by") @QueryParam("tags") List<String> tags)
throws NotFoundException {
// do some magic!
Pet pet = new Pet();
pet.setId(10);
pet.setName("My pet");
pet.setStatus("status");
List<Tag> actualTags = new ArrayList<Tag>();
Tag tag1 = new Tag();
tag1.setId(1);
tag1.setName("tag1");
actualTags.add(tag1);
Tag tag2 = new Tag();
tag2.setId(2);
tag2.setName("tag2");
actualTags.add(tag2);
pet.setTags(actualTags);
return Response.ok().entity(pet).build();
}如果我们能为服务器端改进这一点,我会看一看。实际上,Restlet内部使用swagger2码元工具链来生成这个服务器框架。
希望能帮上忙,蒂埃里
https://stackoverflow.com/questions/28400652
复制相似问题