gpt4 book ai didi

java - @Consume 的运行时内容协商

转载 作者:行者123 更新时间:2023-12-01 04:55:45 25 4
gpt4 key购买 nike

想象一下我的资源可以通过/rest/properties/<key>/data来处理

支持的内容类型取决于属性类型。

对于 GET 这没有问题:( Runtime Content Negotiation )

@GET 
public Response readData(@PathParam("key") String key) {
MyProperty property = getProperty(key);
List<Variant> variants = property.getType().getVariants();
Variant variant = request.selectVariant(variants);
if (null == variant) {
return Response.notAcceptable(variants).build();
}
return Response.ok(property.getData(), variant).build();
// -> registered @Provider (MessageBodyWriter) will be called
}
<小时/>

现在我想要一个“Consumes”的等效项以将其用于 POST/PUT。

定义多个方法的通用方法不是一个选择,因为我需要首先计算类型:

所以目标是这样的:

@POST
public Response updateData(@PathParam("key") String key, InputStream is) {
MyProperty property = getProperty(key);
List<Variant> variants = property.getType().getVariants();
Variant variant = /* get request content type */;
if (!variants.contains(variant)) {
return Response.status(415).build();
}
entity = /* delayed MessageBodyReader call?!
readFrom(is, variant , ExpectedClass.class);
*/

... save entity in db or fs

return Response.ok().build();
}

顺便说一句,常见的方法是:[无法编译(使用媒体类型冲突)]

@POST
@Consumes("text/plain")
public Response updateDataPlain(@PathParam("key") String key, ExpectedClass entity) {
... save entity in db or fs

return Response.ok().build();
}

@POST
@Consumes("text/plain")
public Response updateDataPlain(@PathParam("key") String key, AnotherExpectedClassWhichSupportPlain entity);

最佳答案

我认为你应该

@Consumes("*/*")

然后手动处理Content-Type HTTP header 。

关于java - @Consume 的运行时内容协商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14198589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com