Spring Boot 統一設置Json數據返回風格(Java駝峯命名轉下劃線)

編寫重寫了WebMvcConfigurerAdapter的配置類

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

	/**
	 * 統一輸出風格
	 * See {@link com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy} for details.
	 * @param converters
	 */
	@Override
	public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
		for (int i = 0; i < converters.size(); i++) {
			if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) {
				ObjectMapper objectMapper = new ObjectMapper();
				// 統一返回數據的輸出風格
				objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategy.SnakeCaseStrategy());
				objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
				objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
				objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
				MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
				converter.setObjectMapper(objectMapper);
				converters.set(i, converter);
				break;
			}
		}// end for
	}
}

編寫Controller

@GetMapping("/api/getUser")
	public Object getUser() {
		List<User> users = new ArrayList<User>();
		users.add(new User("1", "小京", "北京"));
		users.add(new User("2", "小海", "上海"));
		users.add(new User("1", "小廣", null));
		return users;
	}

	@Data
	@AllArgsConstructor
	class User {
		private String id;

		private String userName;

		private String addr;
	}

查看返回結果

調用/api/getUser

[
    {
        "id": "1",
        "user_name": "小京",
        "addr": "北京"
    },
    {
        "id": "2",
        "user_name": "小海",
        "addr": "上海"
    },
    {
        "id": "1",
        "user_name": "小廣"
    }
]

風格闡述

  • Java屬性名稱統一爲如下規則
"userName" is translated to "user_name"
"UserName" is translated to "user_name"
"USER_NAME" is translated to "user_name"
"user_name" is translated to "user_name" (unchanged)
"user" is translated to "user" (unchanged)
"User" is translated to "user"
"USER" is translated to "user"
"_user" is translated to "user"
"_User" is translated to "user"
"__user" is translated to "_user" (the first of two underscores was removed)
"user__name" is translated to "user__name" (unchanged, with two underscores)  
  • 空字段不進行返回。如:測試數據中的小廣,沒有地址信息,則不返回’addr’字段
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章