2017-01-11 3 views
2

Я пытаюсь десериализации JSON, используя fasterxml Джексоном, одно из полей в Json является строкой, но мне нужно, чтобы прочитать то же самое в массив байтов PFB Боб и главный классНе удалось расшифровать VALUE_STRING, как base64

public class Serialization implements Serializable{ 

    private static final long serialVersionUID = 5894318390213780082L; 
    private String name = null; 

    @JsonDeserialize(using = StringtoByteArray.class) 
    private byte[] pass = null; 
//getter setter 
} 

public class StringtoByteArray extends JsonDeserializer<byte []> { 

    @Override 
    public byte[] deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) 
      throws IOException, JsonProcessingException { 
     return (jsonParser.getBinaryValue()); 
    } 
} 

public class App 
{ 
    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { 
     Serialization sr = new Serialization(); 
     ObjectMapper mapper = new ObjectMapper(); 

     sr = mapper.readValue(new File("D:\\check.json"), Serialization.class); 
     System.out.println("sr values ::" +sr.toString()); 

     mapper.writeValue(new File("c:\\user.json"), sr); 
    } 
} 

Мой JSON

{ 
     "name": "AD", 
     "pass": "pp" 
} 

в момент получения Deserialize исключение в потоке "основной" com.fasterxml.jackson.databind.JsonMappingException: Не удалось декодировать VALUE_STRING, как base64 (MIME-NO-символы перевода строки): Нелегальная символ '' '(код 0x22) в содержимом base64Просьба предложить

ответ

1

При использовании Java 8: В моей реализации десериализации я должен был вернуться

return (Base64.getEncoder().encode(jsonParser.getText().getBytes())) 
+1

Вместо всегда указывать кодовую страницу 'GetBytes (StandardCharsets.UTF_8)'. –

Смежные вопросы