code: private Map<String, Object> createMessageVariables(final Context context) {
          
          final Map<String, Object> vars = new HashMap<>();
          
          if(context instanceof MessageInterpolatorContext) {
              MessageInterpolatorContext mic = (MessageInterpolatorContext)context;
              vars.putAll(mic.getMessageParameters());
          }
          
          final ConstraintDescriptor<?> descriptor = context.getConstraintDescriptor();
          for(Map.Entry<String, Object> entry : descriptor.getAttributes().entrySet()) {
              final String attrName = entry.getKey();
              final Object attrValue = entry.getValue();
              
              vars.put(attrName, attrValue);
          }
          
          // 検証対象の値
          vars.computeIfAbsent("validatedValue", key -> context.getValidatedValue());
          
          // デフォルトのメッセージ
          final String defaultCode = String.format("%s.message", descriptor.getAnnotation().annotationType().getCanonicalName());
          final Optional<String> defaultMessage = messageResolver.getMessage(defaultCode);
          
          vars.put(defaultCode, 
                  defaultMessage.orElseThrow(() -> new RuntimeException(String.format("not found message code '%s'", defaultCode))));
          
          
          return vars;
          
      }
docs: メッセージ中で利用可能な変数を作成する
  @param context コンテキスト
  @return メッセージ変数のマップ