2 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
與 Rayen 的回答類似,您必須注冊(cè)反序列化器。Swagger 為其對(duì)象(例如參數(shù)、屬性、模型)提供了序列化io.swagger.util
器io.swagger:swagger-core
。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
我找到了,我需要實(shí)現(xiàn) Deserializers 以明確聲明要使用的類構(gòu)造函數(shù)。我對(duì)參數(shù)、模型和屬性都有問題,它們都是接口。
這是代碼:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(io.swagger.models.parameters.Parameter.class, new ParameterDeserializer());
module.addDeserializer(io.swagger.models.Model.class, new ModelDeserializer());
module.addDeserializer(io.swagger.models.properties.Property.class, new PropertyDeserializer());
mapper.registerModule(module);
只是一個(gè)澄清事情的例子,我以后可以使它更靈活:
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import io.swagger.models.parameters.BodyParameter;
import io.swagger.models.parameters.FormParameter;
import io.swagger.models.parameters.Parameter;
import io.swagger.models.parameters.PathParameter;
import io.swagger.models.parameters.QueryParameter;
public class ParameterDeserializer extends StdDeserializer<io.swagger.models.parameters.Parameter> {
/**
*
*/
private static final long serialVersionUID = 1L;
public ParameterDeserializer() {
this(null);
}
public ParameterDeserializer(Class<?> vc) {
super(vc);
}
@Override
public Parameter deserialize(JsonParser parser, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
final JsonNode node = parser.getCodec().readTree(parser);
final ObjectMapper mapper = (ObjectMapper) parser.getCodec();
if (node.get("in").toString().toLowerCase().replaceAll("\"", "").equals("path")) {
return mapper.treeToValue(node, PathParameter.class);
} else if (node.get("in").toString().toLowerCase().replaceAll("\"", "").equals("body")) {
return mapper.treeToValue(node, BodyParameter.class);
} else if (node.get("in").toString().toLowerCase().replaceAll("\"", "").equals("query")) {
return mapper.treeToValue(node, QueryParameter.class);
} else {
return mapper.treeToValue(node, FormParameter.class);
}
}
}
其他反序列化器也一樣。希望能幫助到你。
添加回答
舉報(bào)