本文整理自 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 网络编程领域。建议集合备用,关键时刻能救急。


原始标题:Top 10 Articles on Baeldung from 2014