Springboot -- JSON

Spring Boot提供了与三个JSON库的集成。

  • Gson
  • Jackson
  • JSON-B

Jackson时首选和默认的库 。

1.Jackson

Jackson是自动配置,它是spring-boot-starter-json的一部分。当Jackson在classpath上时,会自动配置ObjectMapper bean,你也可以通过一些配置属性来定制ObjectMapper。

1.1自定义Serializers和Deserializers 

如果你使用Jackson来序列化和反序列化JSON数据,你可能想编写自己的JsonSerializer和JsonDeserializer类。自定义序列化器通常是通过模块向Jackson注册的,但Spring Boot提供了一个替代性@JsonComponent注解,使直接注册Spring Bean变得更加容易。

你可以在JsonSerializer,JsonDeserializer或KeyDeserializer得实现上使用@JsonComponent注解。你也可以在包含serializers/deserializers作为内部类得类上使用它。

@JsonComponent
public class MyJsonComponent {

    public static class Serializer extends JsonSerializer<MyObject> {

        @Override
        public void serialize(MyObject value, JsonGenerator jgen, SerializerProvider serializers) throws IOException {
            jgen.writeStartObject();
            jgen.writeStringField("name", value.getName());
            jgen.writeNumberField("age", value.getAge());
            jgen.writeEndObject();
        }

    }

    public static class Deserializer extends JsonDeserializer<MyObject> {

        @Override
        public MyObject deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
            ObjectCodec codec = jsonParser.getCodec();
            JsonNode tree = codec.readTree(jsonParser);
            String name = tree.get("name").textValue();
            int age = tree.get("age").intValue();
            return new MyObject(name, age);
        }

    }
}

 Application中的所有@JsonComponent Bean都会自动注册Jackson。因为@JsonComponent是@Component元注解的,所以通常的组件扫描规则适用。

2. Gson

为Gson提供了自动配置。当Gson在classpath上时,会自动配置一个Gson Bean。提供了几个spring.gson.*配置属性来定制配置。需要进一步设置,可以适用一个或多个GsonBuilderCustomizer bean

3. JSON-B

为JSON-B提供了自动配置功能,当JSON-B API和一个实现在classpath上时,一个Jsonb Bean将被自动配置。首选的JSON-B实现是Eclipse。 

### 如何使用 Spring Boot 创建 HTTP RESTful API #### 项目创建与依赖管理 要开始构建基于 Spring Boot 的 RESTful API 应用程序,首先需要设置一个新的 Maven 或 Gradle 项目,并引入必要的依赖项。对于大多数 Web 应用来说,`spring-boot-starter-web` 是必需的,因为它包含了构建 Web 应用所需的核心库。 ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` #### 启动类定义 接着,在应用程序入口处编写启动类,该类通常带有 `@SpringBootApplication` 注解,用于启用自动配置和其他特性。此注解集成了组件扫描、配置属性加载等功能[^3]。 ```java package cn.juwatech.springbootrest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootRestApplication { public static void main(String[] args) { SpringApplication.run(SpringBootRestApplication.class, args); } } ``` #### 控制器层设计 为了暴露 REST 接口给客户端调用,需创建一个控制器类。此类中的每一个公共方法都映射到具体的 URL 路径上,并通过相应的 HTTP 方法访问。例如: - 使用 `@RestController` 来标记这是一个返回 JSON 数据而非视图页面的控制器; - 利用 `@RequestMapping`, `@GetMapping`, `@PostMapping` 等注解指定路由规则以及所支持的方法类型; 下面是一个简单的例子展示如何获取单个用户的详情信息[^5]。 ```java @RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; @Autowired public UserController(UserService userService){ this.userService = userService; } /** * 获取指定ID的用户对象. */ @GetMapping("/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { User user = userService.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found")); return ResponseEntity.ok(user); } // 更多接口... } ``` 这里展示了基本 CRUD 操作之一——读取资源的操作模式。当接收到 GET 请求 `/api/users/{id}` 时,会触发上述方法执行查询逻辑并将结果封装成 `ResponseEntity` 返回给前端。 #### 错误处理机制 良好的错误处理也是高质量 API 设计的一部分。可以自定义全局异常处理器来统一管理和标准化不同类型的异常情况下的响应格式。这有助于提高用户体验的一致性和可靠性。 ```java @ControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) protected ResponseEntity<Object> handleResourceNotFound(RuntimeException ex, WebRequest request) { String bodyOfResponse = "This should be application specific"; return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.NOT_FOUND, request); } // 处理更多异常... } ``` 以上就是利用 Spring Boot 构建简单却功能完备的 RESTful API 所涉及的关键要素概述[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值