validator validate valid parser example body java spring spring-boot json-schema-validator

java - parser - spring boot validate request body



Leer el archivo de la carpeta de recursos en Spring Boot (6)

Estoy usando Spring Boot y json-schema-validator . Estoy intentando leer un archivo llamado jsonschema.json de la carpeta de resources . He intentado de varias maneras diferentes pero no puedo hacerlo funcionar. Este es mi código.

ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("jsonschema.json").getFile()); JsonNode mySchema = JsonLoader.fromFile(file);

Esta es la ubicación del archivo.

Y aquí puedo ver el archivo en la carpeta de classes .

Pero cuando ejecuto el código me sale el siguiente error.

jsonSchemaValidator error: java.io.FileNotFoundException: /home/user/Dev/Java/Java%20Programs/SystemRoutines/target/classes/jsonschema.json (No such file or directory)

¿Qué es lo que estoy haciendo mal en mi código?


Aquí está mi solución. Puede ayudar a alguien;

Devuelve InputStream, pero supongo que también puedes leerlo.

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jsonschema.json");


Después de pasar mucho tiempo tratando de resolver este problema, finalmente encontré una solución que funciona. La solución hace uso de los ResourceUtils de Spring. Debería funcionar para archivos json también.

Gracias por la página bien escrita por Lokesh Gupta: Blog

package utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ResourceUtils; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.io.File; public class Utils { private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class.getName()); public static Properties fetchProperties(){ Properties properties = new Properties(); try { File file = ResourceUtils.getFile("classpath:application.properties"); InputStream in = new FileInputStream(file); properties.load(in); } catch (IOException e) { LOGGER.error(e.getMessage()); } return properties; } }


Respuesta muy breve: está buscando su propiedad en el ámbito de un cargador de clases particular en lugar de su clase objetivo. Esto debería funcionar:

File file = new File(getClass().getResource("jsonschema.json").getFile()); JsonNode mySchema = JsonLoader.fromFile(file);

También, vea esto:

PD: puede haber un problema si el proyecto se ha compilado en una máquina y luego se ha iniciado en otra o si ejecuta su aplicación en Docker. En este caso, las rutas a su carpeta de recursos pueden ser inválidas. En este caso, sería mejor determinar las rutas a sus recursos en tiempo de ejecución:

ClassPathResource res = new ClassPathResource("jsonschema.json"); File file = new File(res.getPath()); JsonNode mySchema = JsonLoader.fromFile(file);


Si tiene, por ejemplo, la carpeta de configuración en la carpeta de recursos, he intentado que esta clase funcione perfectamente.

File file = ResourceUtils.getFile("classpath:config/sample.txt") //Read File Content String content = new String(Files.readAllBytes(file.toPath())); System.out.println(content);


atrapado en el mismo tema esto me ayuda

URL resource = getClass().getClassLoader().getResource("jsonschema.json"); JsonNode jsonNode = JsonLoader.fromURL(resource);


cree la carpeta json en los recursos como subcarpeta, luego agregue el archivo json en la carpeta y luego puede usar este código:

import com.fasterxml.jackson.core.type.TypeReference;

InputStream is = TypeReference.class.getResourceAsStream("/json/fcmgoogletoken.json");

Esto funciona en Docker.