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’字段

你可能感兴趣的:(Java)