生成示例客户端和服务器时发生Restlet Studio错误422

生成示例客户端和服务器时发生Restlet Studio错误422,rest,jax-rs,restlet,swagger,restlet-2.0,Rest,Jax Rs,Restlet,Swagger,Restlet 2.0,您好,我正在使用restletstudio从您的示例宠物商店API生成一个客户机和服务器。以下是我的步骤: 生成Java服务器(JAX-RS) 编辑pom.xml以生成war文件 mvn包 作为webapp部署到jetty服务器 通过使用浏览器点击URL来验证其是否有效: 答复: {"code":4,"type":"ok","message":"magic!"} 在我用Java生成客户机之前,我认为这是可行的 我将端点从webnik更改为我的Web服务器 制作一个简单的主方法 public

您好,我正在使用restletstudio从您的示例宠物商店API生成一个客户机和服务器。以下是我的步骤:

  • 生成Java服务器(JAX-RS)
  • 编辑pom.xml以生成war文件
  • mvn包
  • 作为webapp部署到jetty服务器
  • 通过使用浏览器点击URL来验证其是否有效:
  • 答复:

    {"code":4,"type":"ok","message":"magic!"}
    
  • 在我用Java生成客户机之前,我认为这是可行的
  • 我将端点从webnik更改为我的Web服务器
  • 制作一个简单的主方法

    public static void main(String[] args) {
        try {
            FindPetByTagsClientResource a = new FindPetByTagsClientResource();
            Pet represent = a.represent();
    
        } catch (Exception ex) {
            Logger.getLogger(APIPetStore.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
  • 当我运行它时,我得到以下信息:

  • 运行: 启动内部HTTP客户端 空的

    不可处理实体(422)-服务器了解请求实体的内容类型,请求实体的语法正确,但无法处理包含的指令 位于org.restlet.resource.resource.toObject(resource.java:893) 位于org.restlet.engine.resource.ClientInvocationHandler.invoke(ClientInvocationHandler.java:326) 位于com.sun.proxy.$Proxy5.represent(未知源) 位于net.apispark.webapi.client.FindPetByTagsClientResource.representation(FindPetByTagsClientResource.java:22) 位于apipetstore.apipetstore.main(apipetstore.java:28) 原因:java.io.IOException:无法创建对象表示 位于org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:282) 位于org.restlet.service.ConverterService.toObject(ConverterService.java:229) 位于org.restlet.resource.resource.toObject(resource.java:889) ... 4更多 原因:java.lang.IllegalArgumentException:序列化表示必须具有以下媒体类型:application/x-java-serialized-object或此媒体类型:application/x-java-serialized-object+xml 位于org.restlet.representation.ObjectRepresentation.(ObjectRepresentation.java:221) 位于org.restlet.representation.ObjectRepresentation.(ObjectRepresentation.java:123) 位于org.restlet.representation.ObjectRepresentation.(ObjectRepresentation.java:104) 位于org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:279) ... 还有6个 生成成功(总时间:0秒)

  • 将main方法更改为此,它将起作用:

    public static void main(String[] args) {
        try {
            FindPetByTagsClientResource a = new FindPetByTagsClientResource();
    
            a.getClientResource().get().write(System.out);
        } catch (Exception ex) {
            Logger.getLogger(APIPetStore.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
  • 输出:

  • 启动内部HTTP客户端

    {"code":4,"type":"ok","message":"magic!"}
    

    关于如何解决这个问题有什么想法吗?

    事实上,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 Studio在内部使用swagger2 codegen工具链来生成此服务器框架

    希望有帮助, 蒂埃里

    @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();
    }