Dropwizard + Raml -> 空资源

Posted

技术标签:

【中文标题】Dropwizard + Raml -> 空资源【英文标题】:Dropwizard + Raml -> empty resource 【发布时间】:2016-01-25 17:36:30 【问题描述】:

当我启动服务器时,有一个警告说我的资源是空的(导致 404):

WARN  org.glassfish.jersey.internal.Errors - The following warnings have been detected: WARNING: A resource, Resource"helloz", 0 child resources, 0 resource methods, 0 sub-resource locator, 0 method handler classes, 0 method handler instances, with path "helloz" is empty. It has no resource (or sub resource) methods neither sub resource locators defined.

拉姆尔:

#%RAML 0.8
---
title: API
version: 0.1
mediaType: application/json
baseUri: "apiRoot/api"
baseUriParameters:
    apiRoot:
        description: Set the root of the service here
        example: http://localhost:9090
schemas:
   - common: !include common-schema.json
   - hello-schema: |
              "$schema": "http://json-schama.org/draft-03/schema",
               "type": "object",
               "description": "A Hello World Schema",
               "properties": 
                   "times":  "type": "number"
               
            
   - meta-error: |
           "$schema": "http://json-schama.org/draft-03/schema",
            "type": "object",
            "description": "A generic error response for the API",
            "properties": 
                "message":  "type": "string" ,
                "details":  "type": "array",
                             "items":  "type": "string" 
                           
            
         
traits:
  - secured:
      usage: Apply this to any method that needs to be secured
      description: Some requests require authentication.
      queryParameters:
        access_token:
          description: Access Token
          type: string
          example: ACCESS_TOKEN
         # required: true

/helloz:
    is: [ secured ]
    post:
        description: Just say hello
        body:
            application/json:
                schema: hello-schema
                example: !include examples/empty.json
        responses:
             200:
                 body:
                    application/json:
                        schema: hello-schema
             400:
                 description: A malformed input message
                 body:
                    application/json:
                        schema: meta-error

实施:

public class SayHello implements Helloz 

    @Override
    public PostHellozResponse postHelloz(@QueryParam("access_token") String accessToken, HelloSchema entity) throws Exception 
        System.out.println("Hello World!");
        return PostHellozResponse.withJsonOK(null);
    

在 Application#run 中,我只需执行以下操作:environment.jersey().register(SayHello.class);

【问题讨论】:

【参考方案1】:

好的,这并不明显 - 您需要删除实现类中的注释:

错误

public class SayHello implements Helloz 

    @Override
    public PostHellozResponse postHelloz(@QueryParam("access_token") String accessToken, HelloSchema entity) throws Exception 
        System.out.println("Hello World!");
        return PostHellozResponse.withJsonOK(null);
    

正确:

public class SayHello implements Helloz 

    @Override
    public PostHellozResponse postHelloz(String accessToken, HelloSchema entity) throws Exception 
        System.out.println("Hello World!");
        return PostHellozResponse.withJsonOK(null);
    

【讨论】:

以上是关于Dropwizard + Raml -> 空资源的主要内容,如果未能解决你的问题,请参考以下文章

@Context 注入在 Je​​rsey ContainerRequestFilter (Dropwizard) 中不起作用

MuleSoft 使用 RAML 片段将 RAML 规范导入 Anypoint Studio

RAML 有 Eclipse 插件吗? [关闭]

RAML中基于查询参数的动态调用

在线提供示例 RAML [关闭]

RAML:嵌套模式