Проверьте, является ли JSON верным Swagger или нет - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть javax.json.Json объект, который мне нужно проверить, если это допустимый файл Swagger или нет.Я написал эти служебные функции -

package com.somecompany.gis.util;

import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonWriter;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.swagger.models.Swagger;
import io.swagger.parser.SwaggerParser;



public class Converter {
public static JsonNode toJsonNode(JsonObject jsonObject) throws IOException {

    // Parse a JsonObject into a JSON string
    StringWriter stringWriter = new StringWriter();
    try (JsonWriter jsonWriter = Json.createWriter(stringWriter)) {
        jsonWriter.writeObject(jsonObject);
    }
    String json = stringWriter.toString();

    // Parse a JSON string into a JsonNode
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode jsonNode = objectMapper.readTree(json);

    return jsonNode;
}

    public static boolean isValidSwaggerSpec(JsonObject jsonObject) {
    try {
        JsonNode jsonNode = toJsonNode(jsonObject);
        Swagger swagger = new SwaggerParser().read(jsonNode);
        return true;
    }catch(IOException ioe) {
        return false;
    }catch(Exception e) {
        return false;
    }

}

Однако я вижу, что даже с недопустимым файлом Swagger я получаю оценку true.Могу ли я проверить, действителен ли Swagger или нет?

1 Ответ

0 голосов
/ 17 декабря 2018

Возможно, вы сможете использовать SwaggerParser # readWithInfo , который возвращает объект SwaggerDeserializationResult, когда при возникновении ошибки они заполняют List<String> messages этого объекта определенным сообщением:

return new SwaggerDeserializationResult().message("empty or null swagger supplied");
result = new SwaggerDeserializationResult().message("Definition does not appear to be a valid Swagger format");
return new SwaggerDeserializationResult().message("malformed or unreadable swagger supplied");

Вы можете проверить эти предложения и убедиться, что это нет из них, это должно означать, что оно успешно проанализировано.


SwaggerDeserializationResult swagger = new SwaggerParser().readWithInfo(myJSONString);
List<String> messages = swagger.getMessages();

// Check if messages contains any of those strings
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...