在 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
输入 a
和 b
,您需要在 @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);
}
我正在尝试学习 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
输入 a
和 b
,您需要在 @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);
}