如何解决POJO中的多个查询值绑定
我有一个简单的控制器和rest API,如下所示,我想将“名称”,“价格”和“描述”查询值映射到ProductSearchCriteria
中:
@Controller("/api/v1/product")
public class ProductController {
private static final Logger LOG = LoggerFactory.getLogger(ProductController.class);
@Operation(summary = "Find all products")
@ApiResponses(value = {@ApiResponse(content = {@Content(mediaType = "application/json",schema = @Schema(implementation = ProductViewModel.class))})})
@Get(uri="/")
List<ProductViewModel> find(@Valid ProductSearchCriteria searchCriteria) {
LOG.info("Finding all the products");
//return productProducer.find(searchCriteria);
return new ArrayList<>();
}
}
产品搜索条件
public class ProductSearchCriteria {
@JsonProperty("name")
Optional<String> name;
@JsonProperty("price")
Optional<Float> price;
@JsonProperty("description")
Optional<String> description;
public Optional<String> getName() {
return name;
}
public void setName(Optional<String> name) {
this.name = name;
}
public Optional<Float> getPrice() {
return price;
}
public void setPrice(Optional<Float> price) {
this.price = price;
}
public Optional<String> getDescription() {
return description;
}
public void setDescription(Optional<String> description) {
this.description = description;
}
}
错误
Error: 400 Bad Request
{
"message": "Required argument [ProductSearchCriteria searchCriteria] not specified","path": "/searchCriteria","_links": {
"self": {
"href": "/api/v1/product?name=string&price=0&description=string","templated": false
}
}
}
解决方法
您错过了@Get
批注中的某些内容
@Operation(summary = "Find all products")
@ApiResponses(value = {@ApiResponse(content = {@Content(mediaType = "application/json",schema = @Schema(implementation = ProductViewModel.class))})})
@Get(uri="/{?searchCriteria*}")
List<ProductViewModel> find(@Valid ProductSearchCriteria searchCriteria) {
LOG.info("Finding all the products");
//return productProducer.find(searchCriteria);
return new ArrayList<>();
}
您还错过了@Introspected
POJO上的ProductSearchCriteria
。
由于您使用的是@Valid
,因此我会在ProductSearchCriteria
内使用验证注释代替Optional
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。