Метод toString печатает строку Objcet как массив символов

#java #logging #apache-commons-lang3

#java #ведение журнала #apache-commons-lang3

Вопрос:

Я пытаюсь войти в soap-запрос, если мой ввод представляет собой просто строковый объект, ReflectionToStringBuilder создает журнал с разделением моего объекта на символы по символам. Странно то, что если у меня есть строка внутри объекта, она хорошо регистрируется. Как это исправить?

Код в методе Java, c является единственным объектом для регистрации:

   ToStringStyle style = new RecursiveToStringStyle();
  style = new MultilineRecursiveToStringStyle();
  logClass.append(ReflectionToStringBuilder.toString(c,style.MULTI_LINE_STYLE));    
  

Пример запроса Soap:

   <v12:serviceName>
     <v12:cod1>05034</v12:cod1>
     <v12:obj>
        <v13:objName>GOOGLE</v13:objName>
        <v13:objCode>123456789</v13:objCode>
     </v12:obj>
  </v12:serviceName>
  

Результат журнала:

   2019-04-08 15:54:49,237 INFO  [null] - serviceName - INPUT:
  java.lang.String@ebbb509[
    value={0,5,0,3,4}
    hash=45955692
  ]
   obj@183ef29d[
   objName=GOOGLE
   objCode=123456789
  ]
  

Ожидаемый результат журнала:

   2019-04-08 15:54:49,237 INFO  [null] - serviceName - INPUT:
  java.lang.String@ebbb509[
    value=05034
    hash=45955692
  ]
   obj@183ef29d[
   objName=GOOGLE
   objCode=123456789
  ]
  

Комментарии:

1. Ну, во-первых, вы ожидаете строку, содержащую дополнительные 4: 050434 . Я предполагаю, что это опечатка, поскольку хэш-код строки 05034 текущей реализации String ‘s hashCode() действительно 45955692 . Во-вторых, это похоже value и hash является всего лишь двумя свойствами String . value является a char[] , вот почему он печатается как {0,5,0,3,4} .

2. @MCEmperor Вы правы, это была опечатка. Вы также правы в отношении результата, и я знаю, что hash и char являются двумя свойствами строки. Но я пытаюсь получить журнал без них и только со строкой. Кроме того, objName также является строкой, так почему он не печатает символы и их хэш