編寫重寫了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’字段