如何使json反序列化失败,当检测到重复的属性在API POST请求体



我有一个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_DETECTIONObjectMapper具有相同逻辑的解决方案,但用于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响应。

最新更新