如何在Jackson中使用PropertyNamingStrategy
Jackson api被廣泛用于將json轉換為Object并將Object轉換為JSON。因此,如果您有json字符串并想在java對象中進行轉換,請創建與json中的字段相同的bean的字段名。 Jackson在將json字段映射到java對象字段時遵循標準的bean約定,但是如果您有一個不遵循命名約定的json(對于以大寫字母開頭的ex字段),jackson不知道如何將該字段與您的java對象映射。 您可以使用@JsonProperty批注,但有時很難在每個類的每個字段上都使用此批注。這就是PropertyNamingStrategy的 用意 。 您可以根據需要修改此類。
讓我們舉個例子。 我們有一個像這樣的json:
請注意,每個字段的首字母均為大寫字母,這不是標準的bean命名約定。 我們正在嘗試將此json映射到以下bean:
public class JsonBean {/*** */private String custNo ;private String custName ; private String result;public String getResult() {return result;}public void setResult(String result) {this.result = result;}public String getCustNo() {return custNo;}public void setCustNo(String custNo) {this.custNo = custNo;}public String getCustName() {return custName;}public void setCustEm(String custName) {this.custName = custName;} }要將這個json映射到jsonBean,我們必須創建自己的自定義命名策略,如下所示。 在這里,我們將字段名稱的首字母轉換為大寫。
import org.codehaus.jackson.map.MapperConfig; import org.codehaus.jackson.map.PropertyNamingStrategy; import org.codehaus.jackson.map.introspect.AnnotatedField; import org.codehaus.jackson.map.introspect.AnnotatedMethod;public class MyNameStrategy extends PropertyNamingStrategy{@Overridepublic String nameForField(MapperConfigconfig,AnnotatedField field, String defaultName) {return convert(defaultName);}@Overridepublic String nameForGetterMethod(MapperConfigconfig,AnnotatedMethod method, String defaultName) {return convert(defaultName);}@Overridepublic String nameForSetterMethod(MapperConfigconfig,AnnotatedMethod method, String defaultName) {String a = convert(defaultName); return a;}public String convert(String defaultName ){char[] arr = defaultName.toCharArray();if(arr.length !=0){if ( Character.isLowerCase(arr[0])){char upper = Character.toUpperCase(arr[0]);arr[0] = upper;}}return new StringBuilder().append(arr).toString();}}這是要測試的主要課程。 我們正在Jackson的ObjectMapper中設置customNamingStrategy。
import java.io.File; import java.io.IOException;import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper;public class JsonTest {public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();mapper.setPropertyNamingStrategy(new MyNameStrategy());File f = new File('F:/abc.json');JsonBean bean = (JsonBean)mapper.readValue(f, JsonBean.class);mapper.writeValue(new File('F:/abc1.json'),bean);System.out.println(bean.getCustEm());}}如果您無法提供命名策略,則將獲得Exception,如下所示:
Exception in thread 'main' org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field 'CustNo' (Class JsonBean), not marked as ignorable參考: Java,J2EE和Server博客上JCG合作伙伴 Abhishek Somani的Jackson中的PropertyNamingStrategy用法 。
翻譯自: https://www.javacodegeeks.com/2013/04/how-to-use-propertynamingstrategy-in-jackson.html
總結
以上是生活随笔為你收集整理的如何在Jackson中使用PropertyNamingStrategy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse中的Tomcat:6个流行
- 下一篇: Spotify 将限制白噪声播客创作者广