¿Cómo puedo usar archivos externos como recursos para MeseoSource? -- spring-boot camp Relacionados El problema

How can I use external files as resources for MessageSource?


0
vote

problema

Español

He creado clases de anotación de validación, como @IpV4 , @IpV4List en los paquetes de la biblioteca. Estas anotaciones devuelven la llave (código) que se pueden usar en el MessageSource cuando se viole la validación.

message.properties Los archivos están en la carpeta de recursos comunes, y cada módulo que usa anotaciones en el paquete de la biblioteca intentará especificar la ruta al registrarse MessageSource BEAN.

Sin embargo, cuando una anotación plantea una excepción, como MethodArgumentNotValidException , 9988777666 no encuentra ningún mensaje con la plantilla de mensaje (código definido en la anotación).

He intentado la mayoría de los métodos publicados en StackOverFlow relacionados con este problema.

  1. Nombre de base en aplicación.properties (sin ubicación estática)
  spring.messages.basename=messages/messages, file:/path/to/file   
  1. Nombre de base en @Configuration clase (sin ubicación estática)
  @Bean public MessageSource messageSource(){     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();     messageSource.setBasenames("messages/messages", "file:/path/to/file");     // some other settings...     return messageSource; }   
  1. Ubicación de recursos estática en aplicación.properties
  @IpV4List0  
  1. Ubicación de recursos estática en `` `@ configuración de configuración
  @IpV4List111  

Intenté muchos otros enfoques, pero no pude obtener un mensaje de llamar @IpV4List2 y @IpV4List3 ocurrió.

La estructura de mis proyectos es la siguiente.

  @IpV4List4  
  • application-dev.properties (corriente, @IpV4List5 )
  @IpV4List6  
  • Clase IPv4 en paquete de biblioteca
  @IpV4List7  
  • Clase de ExceptionHandler
  @IpV4List8  
  • La clase DTO usa @ IPv4 Annotation
  @IpV4List9  

¿Cómo puedo usar archivos externos como recursos para SesepSource para compartir mensajes de verificación?

Tengo miedo de que mi habilidad inglesa no sea lo suficientemente buena para comunicarse.

Original en ingles

I created validation annotation classes such as @IpV4, @IpV4List in library packages. These annotations return the key (code) that can be used in the MessageSource when the validation is violated.

message.properties files are in the common resource folder, and each module that uses annotations in library package will attempt to specify the path when registering MessageSource bean.

However, when an annotation raises an exception such as MethodArgumentNotValidException, MessageSource does not find any messages with message template (code defined in the annotation).

I have tried most of the methods posted on StackOverFlow related to this issue.

  1. basename in application.properties (without static-location)
spring.messages.basename=messages/messages, file:/path/to/file 
  1. basename in @Configuration class (without static-location)
@Bean public MessageSource messageSource(){     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();     messageSource.setBasenames("messages/messages", "file:/path/to/file");     // some other settings...     return messageSource; } 
  1. static resource location in application.properties
spring.messages.basename=messages/messages, messages/vailidation_messages spring.resources.static-locations=file:/path/to/parent_of_messages 
  1. static resource location in ```@Configuration` class
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) {     registry.addResourceHandler("file:/path/to/parent_of_messages")     // some other settings     ; } 

I tried many other approaches, but I could not get a message from calling MessageSource.getMessage(), and ConstraintViolationException occurred.

The structure of my projects is as follows.

foo-cloud xe2x94x82 xe2x94x9cxe2x94x80 foo-config xe2x94x82  xe2x94x9cxe2x94x80 resources xe2x94x82  xe2x94x82  xe2x94x9cxe2x94x80 messages << message properties here xe2x94x82  xe2x94x82  xe2x94x82  xe2x94x9cxe2x94x80 validation_messages.properties xe2x94x82  xe2x94x82  xe2x94x82  xe2x94x9cxe2x94x80 validation_messages_en.properties xe2x94x82  xe2x94x82  xe2x94x82  xe2x94x9cxe2x94x80 validation_messages_ja.properties xe2x94x82  xe2x94x82  xe2x94x82  xe2x94x94xe2x94x80 validation_messages_ko.properties xe2x94x82  xe2x94x82  xe2x94x94xe2x94x80 ... xe2x94x82  xe2x94x94xe2x94x80 ... xe2x94x9cxe2x94x80 foo-auth xe2x94x9cxe2x94x80 ... xe2x94x9cxe2x94x80 foo-gateway xe2x94x82 xe2x94x9cxe2x94x80 foo-resource xe2x94x82  xe2x94x9cxe2x94x80 ... xe2x94x82  xe2x94x9cxe2x94x80 foo-application << module to register Bean for MessageSource here xe2x94x82  xe2x94x94xe2x94x80 ... xe2x94x82 xe2x94x9cxe2x94x80 foo-library xe2x94x82  xe2x94x9cxe2x94x80 ... xe2x94x82  xe2x94x94xe2x94x80 util-lib << annotation for validation here xe2x94x82  xe2x94x94xe2x94x80 foo-web    xe2x94x94xe2x94x80 ... 
  • application-dev.properties (current, edited)
spring.messages.basename=messages/messages, messages/validation_messages # <- how to fix? spring.messages.encoding=UTF-8 # spring.resources.static-locations=file:../../foo-config/resources #not used anymore 
  • IpV4 class in library package
import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.ElementType.TYPE_USE; import static java.lang.annotation.RetentionPolicy.RUNTIME;  import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target;  import javax.validation.Constraint; import javax.validation.Payload; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern;  @Documented @Constraint(validatedBy = {}) @Target({ FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE }) @Retention(RUNTIME) @Pattern(regexp = IpV4.PATTERN, message = IpV4.NOT_MATCH) @NotEmpty(message = IpV4.NOT_EMPTY) public @interface IpV4 {      String  PATTERN     = "^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";     String  NOT_EMPTY   = "validation.ip-v4.not_empty";     String  NOT_MATCH   = "validation.ip-v4.not_match";      String message() default "invalid ip format";      Class<?>[] groups() default {};      Class<? extends Payload>[] payload() default {};  } 
  • ExceptionHandler class
@ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) public Map<String, String> validationExceptionCaught(         MethodArgumentNotValidException e) {     return Collections.singletonMap("message", messageSource.getMessage(             e.getBindingResult().getFieldError().getDefaultMessage())); }  /**  * for debugging  */ @ExceptionHandler(MethodArgumentTypeMismatchException.class) @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) public Map<String, String> validationExceptionCaught(         MethodArgumentTypeMismatchException e) {     return Collections.singletonMap("message", e.getMessage()); }  @ExceptionHandler(ConstraintViolationException.class) @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) public Map<String, String> validationExceptionCaught(         ConstraintViolationException e) {     return Collections.singletonMap("message",             messageSource.getMessage(                     e.getConstraintViolations().stream().findFirst()                             .map(ConstraintViolation::getMessageTemplate)                             .orElse(e.getMessage()))); } 
  • DTO class uses @IpV4 annotation
import foo.bar.lib.common.validator.IpV4; import lombok.Data;  @Data public class BarRequest {     @IpV4     private String startIp;     @IpV4     private String endIp;     private String description; } 

How can I use external files as resources for MessageSource To share verification messages?

I am afraid that my English skill is not good enough to communicate.

  
       
       

Lista de respuestas

2
 
vote

Al final, resolví este problema.

El problema fue que el archivo de configuración se retorció o hubo un error tipográfico en la ruta del archivo mientras intentaba varios métodos.

He eliminado todas las propiedades relacionadas con id3 desde el archivo la siguiente fuente.

  id7  

Gracias a id8 por ayudarme.

 

In the end, I solved this problem.

The problem was that the configuration file was twisted or there was a typo in the file path while trying various methods.

I removed all properties related to MessageSource from the application.properties file and registered MessageSource bean in @Configuration class as the following source.

@Bean public MessageSource messageSource() {     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();     messageSource.setBasenames("classpath:messages/messages",             "file:D:/foo-cloud/foo-config/resources/messages_validation");     messageSource.setCacheSeconds(600);     messageSource.setUseCodeAsDefaultMessage(true);     messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());     return messageSource; } 

Thanks to M.Deinum for helping me.

 
 
 
 

Relacionados problema

0  Seguridad de la primavera: autenticar la API de descanso solo si aún no está autenticada a través de un inicio de sesión  ( Spring security authenticate rest api only if not already authenticated via for ) 
todos, Tengo una aplicación de arranque de primavera con MVC y Puntos de final de descanso. Los usuarios del inicio de sesión de la aplicación web utilizand...

0  Formato de números dobles serializados por la primavera  ( Format of double numbers serialized by spring ) 
Estoy usando la bota de primavera y la banda de primavera y tiene la siguiente DTO: public class InstructionDto { private Long id; private String...

0  Escritura de la declaración de fideos para filtrar los resultados de la API de Binance devuelve datos arbitrarios  ( Writing foreach statement to filter binance api results returns arbitrary data ) 
Estoy llamando a la API de Binance que devuelve una lista de datos. Ahora quiero filtrar los datos para obtener algunos resultados y almacenar usando foreach...

0  Niño de restricción de clave externa de una a una relación en JPA Hibernate  ( Foreign key constraint child in one to one relationship in jpa hibernate ) 
Bueno, estoy usando la bota de primavera con JPA y tengo una entidad que contiene la misma entidad que el niño se describe a continuación, cómo se encuentra l...

1  Haciendo el trabajo de Aspectj en un servlet de primavera  ( Making aspectj work on a spring servlet bean ) 
Estoy tratando de obtener un AspectProfiler que trabaja en un servlet de Jersey registrado en un proyecto de primavera. El AspectProfiler está cargado, pero n...

2  El controlador de resorte de resorte no maneja la entrada comprimida GZIP  ( Spring rest controller does not handle gzip compressed input ) 
He configurado mi aplicación de arranque de primavera para manejar la compresión del servidor HTTP al configurar las siguientes propiedades en application.pr...

-1  Bota de primavera con Maven para el proyecto padre  ( Spring boot with maven for parent project ) 
Estoy teniendo un proyecto de boot maven de primavera, cuyo nombre es "csmaster", contiene el código común que uso en mis otros proyectos (AppAdmin). CSSMA...

1  Spring Boot RestTemplate Cerrar conexión para respuestas nulas Resultados en ConnectionPoolTimeOutExCepciones  ( Spring boot resttemplate close connection for null responses results in connecti ) 
Tenemos una aplicación de arranque de primavera que hace llamadas relajantes a un montón de backends, uno de ellos devuelve los repunes nulos a veces, y estam...

3  Contraseña de la consola de arranque de primavera  ( Spring boot console password ) 
Yo uso el arranque de primavera y he leído que se debe imprimir un valor predeterminado en el archivo de registro o la consola, pero no hay nada en mi registr...

0  Crear tablas automáticamente llamando al archivo .sql en el lote de primavera?  ( Create tables automatically by calling sql file in spring batch ) 
Seguí muchos enlaces como Marco de lote de primavera - Auto Crear mesa de lote y https://docs.spring.io/spring-boot/docs/2.0.0.m7/reference/htmlsingle/#how...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos