在 Dropwizard 资源方法中出错

Getting error in a Dropwizard resource method

我正在尝试学习 Dropwizard,因此,我正在尝试构建一个简单的计算器。

这是我写的相关代码:

在申请中class:

@Override
public void run(final CalDropWizServerDemoConfiguration configuration,
                final Environment environment) {

    final CalDropWizServerDemoResource resource = new CalDropWizServerDemoResource();

    environment.jersey().register(resource);

    final TemplateHealthCheck healthCheck = new TemplateHealthCheck();
    environment.healthChecks().register("Sum", healthCheck);
}

资源class:

@Path("/calculator")
@Produces(MediaType.APPLICATION_JSON)
public class CalDropWizServerDemoResource {

    private final AtomicLong counter;

    public CalDropWizServerDemoResource(){

        this.counter = new AtomicLong();
    }

    @GET
    @Timed
    @Path("/sum")
    public Sum calcSum(@PathParam("a") int a, @PathParam("b") int b) {

        System.out.println(a);
        System.out.println(b);

        return new Sum(counter.incrementAndGet(), a + b);
    }
}

api(json 响应的 POJO)class:

public class Sum {

    private long id;
    private int sum;

    public Sum() {
        // Jackson deserialization
    }

    public Sum(long id, int sum) {

        this.id = id;
        this.sum = sum;
    }

    @JsonProperty
    public long getId() {
        return id;
    }

    @JsonProperty
    public int getSum() {
        return sum;
    }
}

我不使用配置 yaml,所以配置 class 是默认配置。

我的问题是,当我调用时,例如:

http://localhost:8080/calculator/sum?a=1&b=5

总和为 0。 我调试发现calcSum()方法中a和b的值被接受为0,这是为什么呢?

谢谢!!

如果您使用 @PathParams 输入 ab,您需要在 @Path url 中为它们添加占位符。可以是这样的:

@Path("/sum/{a}/{b}")

@Path 中每个占位符的标签应与传递给相应 @PathParam 声明的值相匹配。

@PathParam 替换为 @QueryParam,它应该可以正常工作。

@GET
@Timed
@Path("/sum")
public Sum calcSum(@QueryParam("a") int a, @QueryParam("b") int b) {
    System.out.println(a);
    System.out.println(b);

    return new Sum(counter.incrementAndGet(), a + b);
}