Verwenden Sie die @RestController-Annotation im Controller in Spring Boot, um Daten im JSON-Format zurückzugeben.
@RestController
-Annotation enthält @Controller- und @ResponseBody-Annotationen. @RestController
注解包含了 @Controller 和 @ResponseBody 注解。
@ResponseBody
@ResponseBody
-Annotation dient dazu, die zurückgegebene Datenstruktur in das JSON-Format zu konvertieren.
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { String value() default ""; }2. JacksonDas in Spring Boot verwendete Standard-JSON-Parsing-Technologie-Framework ist Jackson. Klicken Sie auf die Spring-Boot-Starter-Web-Abhängigkeit in pom. Wenn Sie die Spring-Boot-Starter-JSON-Abhängigkeit erreichen, sehen Sie den folgenden Code:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> <version>2.0.3.RELEASE</version> <scope>compile</scope> </dependency>#🎜🎜 #Bisher können Sie wissen, dass das in Spring Boot verwendete Standard-JSON-Parsing-Framework Jackson ist.
Entitätsklasse erstellen:
<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>
#🎜 🎜#Controller-Ebene
public class User { private Long id; private String username; private String password; /* 省略get、set和带参构造方法 */ }2. Jacksons KonfigurationsklasseKonvertieren Sie alle Nullen in die Konfiguration „“, wenn Sie in das JSON-Format konvertieren#🎜🎜 #
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"} } }#🎜🎜 #3. FastjsonFastjson ist Open Source von Alibaba.
Was sind die Unterschiede zwischen Jackson und fastjson?
Aus der Sicht der Erweiterung ist Fastjson nicht so flexibel wie Jackson. In Bezug auf die Geschwindigkeit oder Schwierigkeit des Einstiegs kann Fastjson in Betracht gezogen werden, und es ist auch bequemer. #? unterscheidet sich etwas von Jackson. Sie müssen die Klasse WebMvcConfigurationSupport erben und dann die Methode configureMessageConverters überschreiben.
In der Methode können wir das Szenario zur Implementierung der Nullkonvertierung auswählen. Der Code lautet wie folgt: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 字段转成空字符串了。 }4. Kapseln Sie das zurückgegebene Datenformat
#🎜 🎜#Außer Zusätzlich zur Kapselung von Daten müssen wir häufig weitere Informationen zum zurückgegebenen JSON hinzufügen, z. B. den Statuscode Code und die Nachricht an den Anrufer zurückgeben. Der Anrufer kann anhand des Codes oder der Nachricht einige logische Urteile fällen.
Zu den Attributen in der einheitlichen JSON-Struktur gehören Daten, Statuscode und Eingabeaufforderungsinformationen.<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.35</version> </dependency>Ändern Sie den Rückgabewerttyp im Controller und testen Sie
import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @Configuration public class fastJsonConfig extends WebMvcConfigurationSupport { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setDateFormat("yyyy-MM-dd"); config.setSerializerFeatures( // 保留 Map 空的字段 SerializerFeature.WriteMapNullValue, // 将 String 类型的 null 转成"" SerializerFeature.WriteNullStringAsEmpty, // 将 Number 类型的 null 转成 0 SerializerFeature.WriteNullNumberAsZero, // 将 List 类型的 null 转成 [] SerializerFeature.WriteNullListAsEmpty, // 将 Boolean 类型的 null 转成 false SerializerFeature.WriteNullBooleanAsFalse, // 生成的JSON格式化 SerializerFeature.PrettyFormat, // 避免循环引用 SerializerFeature.DisableCircularReferenceDetect); converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName("UTF-8")); List<MediaType> mediaTypeList = new ArrayList<>(); // 解决中文乱码问题,相当于在 Controller 上的 @RequestMapping 中加了个属性 produces = "application/json" mediaTypeList.add(MediaType.APPLICATION_JSON); converter.setSupportedMediaTypes(mediaTypeList); converters.add(converter); } }
Das obige ist der detaillierte Inhalt vonWie gibt SpringBoot das Json-Datenformat zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!