>  기사  >  Java  >  SpringBoot는 Json 데이터 형식을 어떻게 반환합니까?

SpringBoot는 Json 데이터 형식을 어떻게 반환합니까?

WBOY
WBOY앞으로
2023-05-19 23:49:411848검색

    1. @RestController 주석

    JSON 형식으로 데이터를 반환하려면 Spring Boot의 컨트롤러에서 @RestController 주석을 사용하세요.

    • @RestController 주석에는 @Controller 및 @ResponseBody 주석이 포함됩니다. @RestController 注解包含了 @Controller 和 @ResponseBody 注解。

    • @ResponseBody

    @ResponseBody 주석은 반환된 데이터 구조를 JSON 형식으로 변환하는 것입니다.

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Controller
    @ResponseBody
    public @interface RestController {
        String value() default "";
    }

    2. Jackson

    Spring Boot에서 사용되는 기본 JSON 구문 분석 기술 프레임워크는 Jackson입니다.

    pom에서 spring-boot-starter-web 종속성을 클릭합니다. 다음 코드를 참조하세요.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
        <version>2.0.3.RELEASE</version>
        <scope>compile</scope>
    </dependency>

    이 시점에서 Spring Boot에서 사용되는 기본 JSON 구문 분석 프레임워크가 Jackson임을 알 수 있습니다. " "

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jdk8</artifactId>
        <version>2.9.6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.9.6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-parameter-names</artifactId>
        <version>2.9.6</version>
        <scope>compile</scope>
    </dependency>

    3. Fastjson

    Fastjson은 Alibaba에서 오픈 소스로 제공됩니다.

    Jackson과 fastjson의 차이점은 무엇인가요?

    확장 측면에서 fastjson은 Jackson만큼 유연하지 않습니다. 속도나 시작 난이도 측면에서 fastjson을 고려할 수 있으며 더 편리합니다.

    Fastjson dependency

    public class User {
        private Long id;
        private String username;
        private String password;
        /* 省略get、set和带参构造方法 */
    }

    Fastjson 구성 클래스

    fastjson을 사용하는 경우 null 처리가 Jackson과 다소 다릅니다. WebMvcConfigurationSupport 클래스를 상속한 다음configureMessageConverters 메서드를 재정의해야 합니다. 이 메서드에서 null 변환을 구현하려는 시나리오를 선택할 수 있습니다. 코드는 다음과 같습니다.

    import com.itcodai.course02.entity.User;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @RestController
    @RequestMapping("/json")
    public class JsonController {
    
        @RequestMapping("/user")
        public User getUser() {
            return new User(1, "倪升武", "123456");
            //返回 {"id":1,"username":"倪升武","password":"123456"}
        }
    
        @RequestMapping("/list")
        public List<User> getUserList() {
            List<User> userList = new ArrayList<>();
            User user1 = new User(1, "倪升武", "123456");
            User user2 = new User(2, "达人课", "123456");
            userList.add(user1);
            userList.add(user2);
            return userList;
            //返回 [{"id":1,"username":"倪升武","password":"123456"},{"id":2,"username":"达人课","password":"123456"}]
    
        }
    
        @RequestMapping("/map")
        public Map<String, Object> getMap() {
            Map<String, Object> map = new HashMap<>(3);
            User user = new User(1, "倪升武", "123456");
            map.put("作者信息", user);
            map.put("博客地址", "http://blog.itcodai.com");
            map.put("CSDN地址", "http://blog.csdn.net/eson_15");
            map.put("粉丝数量", 4153);
            return map;
            //返回 {"作者信息":{"id":1,"username":"倪升武","password":"123456"},"CSDN地址":"http://blog.csdn.net/eson_15","粉丝数量":4153,"博客地址":"http://blog.itcodai.com"}
    
        }
    }

    4. 반환된 데이터 형식을 캡슐화합니다.

    데이터를 캡슐화하는 것 외에도 몇 가지를 추가해야 하는 경우가 많습니다. 호출자에게 상태 코드 Code 및 Msg를 반환하는 등 반환된 JSON에 대한 기타 정보는 Code 또는 Msg를 기반으로 몇 가지 논리적인 판단을 내릴 수 있습니다. SpringBoot는 Json 데이터 형식을 어떻게 반환합니까?

    통합 JSON 구조의 속성에는 데이터, 상태 코드 및 프롬프트 정보가 포함됩니다.

    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializerProvider;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
    
    import java.io.IOException;
    
    @Configuration
    public class JacksonConfig {
        @Bean
        @Primary
        @ConditionalOnMissingBean(ObjectMapper.class)
        public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
            ObjectMapper objectMapper = builder.createXmlMapper(false).build();
            objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
                @Override
                public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                    jsonGenerator.writeString("");
                }
            });
            return objectMapper;
        }
    }
    
    // 修改一下上面返回 Map 的接口,将几个值改成 null 测试一下:
    
    @RequestMapping("/map")
    public Map<String, Object> getMap() {
        Map<String, Object> map = new HashMap<>(3);
        User user = new User(1, "倪升武", null);
        map.put("作者信息", user);
        map.put("博客地址", "http://blog.itcodai.com");
        map.put("CSDN地址", null);
        map.put("粉丝数量", 4153);
        return map;
    	// 返回 {"作者信息":{"id":1,"username":"倪升武","password":""},"CSDN地址":"","粉丝数量":4153,"博客地址":"http://blog.itcodai.com"}
    	// 可以看到 Jackson 已经将所有 null 字段转成空字符串了。
    }

    컨트롤러에서 반환 값 유형을 수정하고 테스트

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.35</version>
    </dependency>

    위 내용은 SpringBoot는 Json 데이터 형식을 어떻게 반환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제