我有一个POST端点,它接受JSON作为请求体。
@Path("/drink")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class DrinkResource {
@POST
public Drink getDrink(Fruit fruit) {
return new Drink(fruit.getName());
}
}
请求体应该被反序列化成这个POJO:
public class Fruit {
private final String name;
@JsonCreator
public Fruit(@JsonProperty("name") String name) {
this.name = name;
}
public String getName() {
return name;
}
}
我使用Jackson进行反序列化。
当请求体中的JSON具有重复键时,是否有可能使反序列化失败?
例如,如果请求体看起来像这样:{"name" : "banana", "name" : "orange"}
,我希望得到一个500状态码或其他类型的错误,而不是用最后一个属性对json进行反序列化。
基本上,我正在寻找与JsonParser.Feature.STRICT_DUPLICATE_DETECTION
与ObjectMapper
具有相同逻辑的解决方案,但用于POST端点。
我也用了夸克,所以我不知道它是否有一个属性。类似于quarkus.jackson.fail-on-unknown-properties=true
,但具有重复的属性。
添加以下内容:
@Singleton
public class MyCustomizer implements ObjectMapperCustomizer {
@Override
public void customize(ObjectMapper objectMapper) {
objectMapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
}
}
如果您这样做,Quarkus使用的ObjectMapper
将抛出JsonParseException
,从而导致HTTP 400响应。