Jackson JSON faz um caracter especial de escape?

9

Eu estava assumindo que Jackson iria automaticamente escapar caracteres especiais durante a serialização, ou seja, serializar "/ path /" como "\ / path \ /". Parece não ser o caso - pelo menos fora da caixa com 1.6:

@Test
public void testJacksonSerialize() throws Exception
{
    ObjectMapper om = new ObjectMapper();
    assertEquals("\/path\/", om.writeValueAsString("/path/"));
}

... falha - a saída produzida é "/ caminho /". Eu tenho que escrever meu próprio serializador ou existe uma maneira de ativar o escape especial em Jackson?

obrigado -nikita

    
por Nikita 12.01.2011 в 20:37
fonte

3 respostas

4

Jackson só escapa de coisas obrigatórias. "/" não é algo que você deve escapar, por isso não é. Isso de acordo com a especificação JSON.

Agora: se você quiser escapar, você pode usar métodos para escrever conteúdo ou valores "brutos" (nesse caso, Jackson não faz nenhum processamento e despeja String na saída).

Mas você realmente precisa desse tipo de fuga? Eu sei que alguns geradores escapam (por razões desconhecidas para mim), mas nenhum parser espera isso, então deve ser muito bom deixar barras sem escapatória. Isso é diferente das barras invertidas que obviamente devem ser escapadas.

    
por StaxMan 13.01.2011 / 01:33
fonte
1

A barra "/" não precisa ter escape no JSON porque não tem um significado especial. No entanto, o JSON permite que a barra seja escapada pelo seguinte motivo.

Se você despejar um texto JSON diretamente em um < SCRIPT > elemento de um texto em HTML, é necessário certificar-se de que a sequência de dois caracteres "< /" não ocorra no texto. Essa sequência terminaria o elemento script imediatamente de acordo com as regras HTML. Mas se o texto JSON ler "< \ /", isso terá o mesmo significado para JSON, sem interferir nas regras de HTML. Conseqüentemente, alguns geradores JSON escapam da barra se, e somente se, forem precedidos por um sinal menor que o esperado.

Dito isto, não sei a resposta direta à sua pergunta (como fazer absolutamente a fuga em Jackson).

    
por T-Bull 09.05.2011 / 16:09
fonte
0

O caractere de nova linha não funcionará no caso de Tooltip com alguns navegadores. Não está funcionando \ r \ n Não está funcionando ou \ n não está funcionando

Use barra invertida dupla para pular caracteres

Solução: use '\\ r \\ n' no lugar de '\ r \ n',
isso vai resolver o seu problema.

    
por Vaibhav.Inspired 19.04.2012 / 11:00
fonte