2016-02-07 2 views
2

Je API REST à la propriété en application.properties comme ci-dessous:RestTemplate ne retourne pas la valeur avec Snake cas au printemps REST

spring.jackson.property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES 

Tout est OK! Mais quand j'utilise RestTemplate pour faire comme ci-dessous, mais j'ai trouvé toute la clé dans Snake Case est null (ex. NameEnglish), mais le nom de la clé normale sont ok (ex. Rank), comment puis-je résoudre ce problème?

@Data 
@NoArgsConstructor 
@AllArgsConstructor 
@EqualsAndHashCode(exclude = {"id"}) 
@Entity 
public class Brand implements Serializable { 
    private static final long serialVersionUID = 9165709510160554127L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Version 
    private Integer version; 

    private String nameChinese; 
    private String nameEnglish; 
    private String rank; 
} 

j'ai sauvé données ci-dessous:

Saved Brand: Brand(id=1, version=1, nameChinese=乐高, nameEnglish=Lego, rank=Top) 

Mais lorsque je tente le code comme ci-dessous:

Brand brands = restTemplate.getForObject("http://localhost:8080/api/brand/lego", Brand.class); 
System.out.println(brands); 

Le résultat comme ci-dessous, vous verrez toutes les propriétés de cas Camel en null , bien que je leur mette de la valeur:

Saved Brand: Brand(id=1, version=1, nameChinese=null, nameEnglish=null, rank=Top) 

Le formulaire de résultat format JSON CocoaRestCLient

{ 
    "id": 1, 
    "country_chinese": "芬兰", 
    "version": 1, 
    "homepage_url": "http://www.lego.com", 
    "country_english": "Finland", 
    "name_english": "Lego", 
    "rank": "Top", 
    "name_chinese": "乐高" 
} 
+0

Publier un exemple Objet JSON s'il vous plaît. –

+0

J'ai modifié ma question. – mikezang

+0

Merci, ça va aider. Mais pouvez-vous PLS aussi ajouter un exemple de charge utile JSON. Pour éviter les malentendus. –

Répondre

2

Je pense que vous avez une faute de frappe dans application.properties. La valeur correcte est:

spring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES 

ou

spring.jackson.property-naming-strategy=com.fasterxml.jackson.databind.PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy 

Voir Appendix A. Common application properties de Spring Boot Guide de référence:

spring.jackson.property-nommage-stratégie = # L'une des constantes sur Propriété de Jackson PropertyNamingStrategy. Peut également être un nom de classe entièrement qualifié d'une sous-classe PropertyNamingStrategy.

+0

Merci pour votre réponse! Mais je ne suis pas sûr de savoir comment combiner votre code avec le mien, j'ai obtenu l'entité Marque de RestTemplate en tant que marques de marque = restTemplate.getForObject ("http: // localhost: 8080/api/marque/lego", Brand.class); alors votre code convertit la chaîne en marque ... – mikezang

+0

Le message clé est que vous modifiez votre stratégie de nommage en 'CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES'. Cela fera l'affaire. –

+0

Que voulez-vous dire? J'utilise spring.jackson.property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES dans application.properties. – mikezang