本文整理自 Baeldung 官方在 2014 年发布的最受欢迎的 10 篇技术文章,涵盖 Spring、Jackson、HttpClient、Hibernate 等主流 Java 技术栈。内容虽早,但至今仍有参考价值。
1# Http Message Converters with the Spring Framework (~40K 阅读)
核心作用
HttpMessageConverter
是 Spring MVC 中处理 HTTP 请求与响应的核心组件,用于自动转换请求体和响应体的数据格式。
常见实现类
类名 | 说明 |
---|---|
StringHttpMessageConverter |
处理纯文本 |
FormHttpMessageConverter |
处理表单数据 |
MappingJackson2HttpMessageConverter |
JSON 格式转换(Jackson) |
Jaxb2RootElementHttpMessageConverter |
XML 格式转换 |
示例配置
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJackson2HttpMessageConverter());
}
}
踩坑提醒
✅ 推荐使用 Jackson 作为默认 JSON 转换器
❌ 不要手动注册多个 Jackson 转换器,Spring Boot 已默认集成
2# HttpClient Basic Authentication (~24K 阅读)
使用场景
常用于访问需要简单认证的 REST 接口。
示例代码
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet("http://example.com/api/resource");
String auth = "username:password";
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.ISO_8859_1));
String authHeader = "Basic " + new String(encodedAuth);
request.setHeader(HttpHeaders.AUTHORIZATION, authHeader);
HttpResponse response = client.execute(request);
注意事项
⚠️ Base64 编码不是加密,不能用于敏感环境
⚠️ 推荐结合 HTTPS 使用以保证安全
3# Jackson – Custom Deserializer (~18K 阅读)
场景说明
当 JSON 数据结构与 Java Bean 不一致时,可以通过自定义反序列化器处理。
示例代码
public class CustomUserDeserializer extends JsonDeserializer<User> {
@Override
public User deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
JsonNode node = p.getCodec().readTree(p);
String name = node.get("fullName").asText();
int age = node.get("userAge").asInt();
return new User(name, age);
}
}
注册方式:
SimpleModule module = new SimpleModule();
module.addDeserializer(User.class, new CustomUserDeserializer());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
4# Jackson – Custom Serializer (~16K 阅读)
使用场景
控制 JSON 输出格式,比如脱敏、格式转换、字段合并等。
示例代码
public class CustomUserSerializer extends JsonSerializer<User> {
@Override
public void serialize(User user, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeStringField("name", user.getName().toUpperCase());
gen.writeNumberField("age", user.getAge());
gen.writeEndObject();
}
}
注册方式:
SimpleModule module = new SimpleModule();
module.addSerializer(User.class, new CustomUserSerializer());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
5# HttpClient – Set Custom Header (~9K 阅读)
核心用法
为请求添加自定义 Header,常用于 API Key、Accept、Content-Type 等设置。
示例代码
HttpGet request = new HttpGet("http://example.com/api");
request.setHeader("X-API-Key", "1234567890");
request.setHeader("Accept", "application/json");
注意事项
✅ 推荐使用 setHeader()
替代 addHeader()
,避免重复设置
✅ 所有 Header 值都应为字符串类型
6# Java InputStream to String (~9K 阅读)
多种实现方式
推荐使用 BufferedReader
或 Java 8 的 Stream API
。
✅ 推荐方式(Java 8+)
InputStream inputStream = ...;
String result = new BufferedReader(new InputStreamReader(inputStream))
.lines()
.collect(Collectors.joining("\n"));
✅ 更简洁方式(Java 12+)
String result = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
7# Hibernate Pagination (~7K 阅读)
分页查询核心
使用 setFirstResult()
和 setMaxResults()
实现分页。
示例代码
List<User> users = session.createQuery("from User", User.class)
.setFirstResult(10)
.setMaxResults(20)
.list();
踩坑提醒
⚠️ 分页时尽量避免使用 ORDER BY
+ DISTINCT
组合,否则可能导致数据错乱
⚠️ 大数据量分页建议使用游标分页(Cursor-based Pagination)
8# Multipart Upload with HttpClient 4 (~7K 阅读)
文件上传核心类
使用 MultipartEntityBuilder
构建 multipart/form-data 请求体。
示例代码
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost("http://example.com/upload");
File file = new File("/path/to/file.txt");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("file", file, ContentType.APPLICATION_OCTET_STREAM, "file.txt");
builder.addTextBody("description", "This is a test file");
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);
9# HttpClient Connection Management (~6K 阅读)
连接池配置
推荐使用 PoolingHttpClientConnectionManager
管理连接,避免频繁创建销毁。
示例配置
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
connManager.setMaxTotal(100);
connManager.setDefaultMaxPerRoute(20);
HttpClient client = HttpClients.custom()
.setConnectionManager(connManager)
.build();
踩坑提醒
✅ 长连接必须设置合理的超时时间
✅ 避免连接泄漏,务必在 finally 块中关闭响应
10# The Registration Process With Spring Security (~5K 阅读)
核心流程
实现用户注册功能,通常包括:
- 表单提交
- 邮箱验证
- 密码加密
- 用户角色分配
示例代码(密码加密)
PasswordEncoder encoder = new BCryptPasswordEncoder();
String encodedPassword = encoder.encode("rawPassword");
邮箱验证伪代码
String token = UUID.randomUUID().toString();
// 存入数据库或缓存
userRepository.saveVerificationToken(user, token);
// 发送邮件
emailService.sendEmail("user@example.com", "Verify your email", "Click here: http://example.com/verify?token=" + token);
踩坑提醒
✅ 邮件链接应带过期时间,避免长期有效
✅ 注册后建议限制登录失败次数,防止爆破攻击
结语:以上是 2014 年 Baeldung 最受欢迎的 10 篇文章总结。虽然时间久远,但其中很多技术细节至今仍具有参考价值,尤其在 Spring 和 Java 网络编程领域。建议集合备用,关键时刻能救急。