Java · nomenclatura JSON com Jackson
Jackson snake_case ↔ camelCase
Mantenha propriedades Java em camelCase e traduza o JSON externo snake_case na fronteira de serialização.
Usar @JsonNaming em um modelo ou DTO
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserProfile {
private String firstName;
private String avatarUrl;
}SnakeCaseStrategy mapeia firstName para first_name sem annotation em cada propriedade.
Usar ObjectMapper para uma convenção global
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
UserProfile profile = mapper.readValue(json, UserProfile.class);
String output = mapper.writeValueAsString(profile);PropertyNamingStrategies.SNAKE_CASE se aplica a nomes externos na serialização e deserialização.
Usar @JsonProperty para exceções
public class UserProfile {
@JsonProperty("user_id")
private String userId;
@JsonProperty("display_name")
private String displayName;
}Mappings explícitos servem para poucos nomes externos que não seguem a regra global.
Considerações de produção
- Defina claramente o nível dono da convenção: classe, ObjectMapper ou campo.
- A estratégia altera nomes de propriedade, não valores string no JSON.
- Vários nomes externos normalizados para uma propriedade indicam problema de contrato API.
- Os exemplos usam packages Jackson 2.x; revise a migração da sua major version.
Testar a fronteira JSON online
Teste objetos aninhados, arrays, exclusões, stop paths, prefixos, colisões e diff de chaves antes de implementar.
Solte um arquivo .json ou escolha no dispositivo
Arquivos são lidos apenas no navegador. Tamanho máximo: 5 MB.
{
"user_profile": {
"first_name": "Ada",
"created_at": "2026-09-12"
}
}Parsing, leitura de arquivo, formatação e conversão rodam localmente no navegador. O JSON não é enviado a um servidor de conversão.