当前位置:首页 > 后端开发 > 正文

java怎么写json接口

Java中写JSON接口可用Gson、Jackson等库,先添加依赖,再将对象转为 JSON字符串或解析接收的JSON数据

是关于如何在Java中编写JSON接口的详细指南,涵盖从环境搭建到具体实现的完整流程:

准备工作与依赖配置

  1. 开发环境确认:确保已安装JDK并配置好环境变量,推荐使用IntelliJ IDEA或Eclipse等IDE进行开发,通过命令行输入java -version验证安装状态。
  2. 选择JSON库:主流方案包括Gson、Jackson和Fastjson,以Gson为例(轻量且易用),若采用Maven管理项目,则在pom.xml中添加依赖:
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.9</version>
    </dependency>
  3. Web框架集成:基于Spring Boot可快速构建RESTful服务,在application.properties中启用CORS跨域支持,并设置内容协商为JSON格式。

数据模型设计

定义与JSON结构对应的Java类,用户信息对象应包含字段注解以控制序列化行为:

public class User {
    private String name;
    private int age;
    private List<String> hobbies;
    // getters & setters必须存在才能正常解析
}

注意:字段名需与JSON键名一致;若需自定义映射关系,可使用@SerializedName("alias")注释,复杂嵌套结构可通过创建多个POJO类实现。


控制器层实现(以Spring MVC为例)

接收JSON请求体

在Controller方法参数前添加@RequestBody注解,自动将客户端传来的JSON反序列化为对象:

@PostMapping("/users")
public ResponseEntity<String> createUser(@RequestBody User user) {
    // 业务逻辑处理...
    return ResponseEntity.ok("Success");
}

此时HTTP头中的Content-Type应设为application/json,否则会触发415错误。

java怎么写json接口  第1张

返回JSON响应

直接返回对象即可由框架自动转换:

@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
    User found = userService.findById(id);
    return found; // Spring会自动转为JSON格式响应
}

对于异步场景,可结合DeferredResult实现非阻塞式响应。


高级特性配置表

功能 Gson实现方式 Jackson替代方案
排除空字段 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() ObjectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
日期格式化 注册自定义JsonSerializer<Date>() @JsonFormat(pattern="yyyy-MM-dd")
字段命名策略 FieldNamingStrategy.LOWER_CASE_WITH_UNDERSCORES @JsonProperty("lower_case_name")
循环引用检测 需手动处理 内置支持@JsonIdentityInfo

异常处理机制

当遇到非规JSON输入时,全局异常处理器可统一返回标准化错误信息:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(JsonParseException.class)
    public ResponseEntity<?> handleBadJsonRequest(JsonParseException e) {
        Map<String, Object> body = new HashMap<>();
        body.put("error", "Invalid JSON format");
        return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
    }
}

建议配合Swagger生成API文档,便于前端联调测试。


性能优化建议

  1. 复用Gson实例:避免每次调用都新建对象,改为单例模式:
    private static final Gson gson = new GsonBuilder().create();
  2. 流式解析大文件:针对GB级别的JSON数据,采用JsonReader逐行读取而非全量加载。
  3. 缓存机制:对高频访问的数据启用Redis缓存,减少数据库交互次数。

FAQs

Q1: 如果前端发送的JSON字段多于后端定义的实体类怎么办?
A: 默认情况下,多余字段会被忽略,若需要严格校验,可在实体类上添加@Valid注解并结合Hibernate Validator进行非空、长度等约束。

public class CreateRequest {
    @NotNull(message = "用户名不能为空")
    private String username;
}

此时若提交缺失必填项,会返回400 Bad Request及具体错误明细。

Q2: 如何处理JSON中的敏感信息过滤?
A: 推荐两种方式:①在实体类中使用transient关键字标记临时变量;②实现自定义ExclusionStrategy动态脱敏。

public class UserDTO implements ExclusionStrategy {
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        return "password".equals(f.getName()); // 跳过密码字段
    }
}

再通过`new GsonBuilder().addExclusionStrategy(new UserDTO()).

0