-
码云最有价值开源项目 后端接口和文档自动化,前端(客户端) 定制返回JSON的数据和结构! English 通用文档 视频教程 在线体验 导航目录: 项目简介 上手使用 社区生态 ...
-
如何从PyCharm调试WebAPI?
2020-03-01 12:56:33什么是JSON 到目前为止,已经执行了...因此,许多1是的WebAPI JSON(JavaScript对象符号)被很好地利用的格式。JSON的确切格式在RFC 8259中定义。基本上,将Python理解为数值和字符串,布尔值(真,假),可以包含n...什么是JSON
到目前为止,已经执行了将html返回请求的过程。HTML通常被设计为在浏览器上显示并由人类操纵。因此,HTML可以与WebAPI一起使用,但是在程序中使用它通常很麻烦且效率低下。因此,许多1是的WebAPI JSON(JavaScript对象符号)被很好地利用的格式。JSON的确切格式在RFC 8259中定义。基本上,将Python理解为数值和字符串,布尔值(真,假),可以包含null的列表以及字典是很好的。写作风格几乎相同。以下是json的示例。
{ “ id”:3, “ name”:“ hoge”, “ ref”:[1、2、4], }
在此示例中,将数组[1、2、3]分配给数值3,使用id作为键,使用字符串hoge,并使用“ ref”作为名称。
http请求返回JSON
要从Flask返回上述json,请执行以下操作。
from flask import Flask, jsonify app = Flask(__name__) app.config['JSON_AS_ASCII'] = False books = [{'name': 'EffectivePython', 'price': 3315}, {'name': 'Expert Python Programming', 'price': 3960}] @app.route('/') def get_json(): data = { "id": 3, "name": "hoge", "ref": [1, 2, 4], } return jsonify(data) if __name__ == '__main__': app.run()
综上,可以使用普通的Python字典和列表来表示JSON,然后使用jsonify函数将其转换为JSON。
如何从PyCharm调试WebAPI
到目前为止,我从浏览器检查了网页并进行了调试。但是,在调试WebAPI时,可以从PyCharm进行调试更加方便。到目前为止,尤其是对于POST,已经使用了表单,但是WebAPI很难通过浏览器进行操作,因为POST是直接执行的。PyCharm(专业版)具有一个功能(HTTP客户端),可在PyCharm上创建并发送HTTP请求。功能介绍。除PyCharm之外的其他IDE可能会这样做。另一种选择是使用称为cURL的工具。如果您使用的不是PyCharm,请检查一下。
PyCharm的HTTP客户端提供两种方法:一种用于发送临时HTTP请求,另一种用于将HTTP请求保存到文件并发送。在本文中,我将向您展示如何将可重用的HTTP请求保存到文件中。
首先,从文件菜单中选择“新建”,然后单击“ HTTP请求”(见下文)。
然后将要求您输入文件名,因此输入适当的名称(或使用get_test)。
由于这次发送了GET请求,因此请从右上方的“ Add Request”中选择“ GET Request”(请参见下图)。
使用PyCharm的HTTPClient独有的符号编写多个HTTP请求时,显示请求分隔符。您可以写很多,但这是最低要求。其他功能基本上遵循HTTP标头的语法。我要你调查。接下来,让我们实际发送此请求。首先,执行示例程序。之后,您可以通过返回到HTTPClient并在编辑器中单击GET左侧的绿色▶(下方)来发送请求。
在POST请求中接收JSON
至此,前面已经完成了响应GET请求发送回JSON的过程。接下来,我将介绍接收POST请求和其中包含的json的过程。
主程序(app.py)如下。
from flask import Flask, request, jsonify app = Flask(__name__) # 日本語を使えるように app.config['JSON_AS_ASCII'] = False books = [{'name': 'EffectivePython', 'price': 3315}, {'name': 'Expert Python Programming', 'price': 3960}] @app.route('/books', methods=['POST']) def post_json(): # JSONを受け取る json = request.get_json() # JSONをパースする name = json['name'] price = json['price'] book = {'name': name, 'price': price} book_id = len(books) books.append(book) # 返却用ディクショナリを構築 book['id'] = book_id return jsonify(book) # JSONをレスポンス @app.route('/books/<book_id>', methods=['GET']) def get_json_from_dictionary(book_id): return jsonify(books[int(book_id)]) if __name__ == '__main__': app.run()
一个示例请求如下。
POST http://localhost:5000/books Content-Type: application/json { "name": "hoge", "price": 1000 } ### GET http://localhost:5000/books/2 Content-Type: application/json ###
收到POST请求后,您可以使用get_json将JSON转换为Python对象,如下所示。
request.get_json()
由get_json转换的对象可以像Python字典和列表一样进行处理(请参见下文)。
name = json['name'] price = json['price']
此外,您可以使用迄今尚未解释的相同名称定义URL,但使用不同的HTTP方法(此处为GET和POST)。WebAPI(尤其是那些称为REST API的API)通常会这样做。这具有在GET的情况下显式获取并在POST的情况下进行传输的含义。
-
springboot接收json参数_SpringBoot系列教程22-整合SpringMVC之HttpMessageConverters
2020-11-22 00:24:41SpringBoot系列教程22--整合SpringMVC之HttpMessageConverters作者:一一哥一.HttpMessageConverter...但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格...SpringBoot系列教程22--整合SpringMVC之HttpMessageConverters
作者:一一哥
一.HttpMessageConverter简介
1.概述
现在我们进行web开发,一般都要设计成RESTful风格的API,通过json格式的数据进行交互。但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢?
其实这都是由HttpMessageConverter起到的作用!
2.HttpMessageConverter简介
org.springframework.http.converter.HttpMessageConverter 是SpringMVC中提供的一个策略接口,它是一个转换器类,负责转换HTTP请求和响应,可以把对象自动转换为JSON(使用Jackson库或Gson库)或XML(使用Jackson XML或者JAXB2),对字符串默认使用UTF-8编码处理,一般情况下采用默认配置就可以。
该接口说明如下:
Strategy interface that specifies a converter that can convert from and to HTTP requests and responses.
简单说就是 HTTP request (请求)和response (响应)的转换器。该接口里有5个方法,接收到请求时判断是否能读(canRead),能读则读(read);返回结果时判断是否能写(canWrite),能写则写(write),以及获取支持的 MediaType(application/json之类)方法。boolean canRead(Class<?> clazz, MediaType mediaType); boolean canWrite(Class<?> clazz, MediaType mediaType); List<MediaType> getSupportedMediaTypes(); T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException; void write(T t, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
3.HttpMessageConverter转换原理
利用SpringMVC框架,可以使得我们在开发时,只要在代码中使用@RequestBody和@ResponseBody两个注解,就可以分别完成从请求报文到对象和从对象到响应报文的转换。而在源码内部,其实这种灵活的消息转换机制就是利用HttpMessageConverter来实现的。
实现过程参考下图:
SpringMVC在启动时会自动配置一些默认的HttpMessageConverter转换器,在 WebMvcConfigurationSupport 类中添加了缺省的MessageConverter,比如MappingJackson2HttpMessageConverter,StringHttpMessageConverter等。
protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) { StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(); stringConverter.setWriteAcceptCharset(false); messageConverters.add(new ByteArrayHttpMessageConverter()); messageConverters.add(stringConverter); messageConverters.add(new ResourceHttpMessageConverter()); messageConverters.add(new SourceHttpMessageConverter<Source>()); messageConverters.add(new AllEncompassingFormHttpMessageConverter()); if (romePresent) { messageConverters.add(new AtomFeedHttpMessageConverter()); messageConverters.add(new RssChannelHttpMessageConverter()); } if (jackson2XmlPresent) { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.xml().applicationContext(this.applicationContext).build(); messageConverters.add(new MappingJackson2XmlHttpMessageConverter(objectMapper)); } else if (jaxb2Present) { messageConverters.add(new Jaxb2RootElementHttpMessageConverter()); } if (jackson2Present) { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().applicationContext(this.applicationContext).build(); messageConverters.add(new MappingJackson2HttpMessageConverter(objectMapper)); } else if (gsonPresent) { messageConverters.add(new GsonHttpMessageConverter()); } }
从源码中可以看到,SpringMVC中使用Jackson库或Gson库来转换json字符串,使用使用Jackson XML或者JAXB2来转换xml。
而如果我们没有配置自己的 MessageConverter,SpringMVC 启动时就会调用 addDefaultHttpMessageConverters方法。
4.Spring Boot中自定义HttpMessageConverters实现思路
在Spring Boot中我们可以使用HttpMessageConverters添加HttpMessageConverter原生转换类或自定义转换类。
import org.springframework.boot.autoconfigure.web.HttpMessageConverters; import org.springframework.context.annotation.*; import org.springframework.http.converter.*; @Configuration public class MyConfiguration { @Bean public HttpMessageConverters customConverters() { HttpMessageConverter<?> additional = ... HttpMessageConverter<?> another = ... return new HttpMessageConverters(additional, another); } }
从上面的代码示例中,我们看到可以把HttpMessageConverter添加到converters列表,通过这种方式覆盖默认的转换器列表(converters)。
5.自定义消息转换器的方式
我们可以自定义自己的消息转换器来满足特定的需求,一般自定义消息转换器有两种方式:
- 1、使用spring或者第三方提供的现成的HttpMessageConverter;
- 2、自己重写一个HttpMessageConverter。
二.Spring Boot中用FastJsonHttpMessageConverter替换默认转换器
1.创建SpringBoot项目
我们在之前的基础上,新建一个demo10,并将其改造成SpringBoot项目。
2.添加FastJson依赖
在SpringBoot项目中,当我们在控制器类或者其内部的方法上添加@RestController注解和@ResponseBody注解后,默认会使用jackson插件来返回json格式的数据,但是我们也可以利用fastjson为我们提供的FastJsonHttpMessageConverter来返回json格式的数据。
首先引入fastjson的依赖。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.61</version> </dependency>
3.配置FastJsonHttpMessageConverter
我们可以通过实现WebMvcConfigurer接口,来配置FastJsonHttpMessageConverter,在Spring Boot2.0版本以后推荐使用这种方式来进行web配置,这样不会覆盖掉Spring Boot的一些默认配置.
我们创建如下的目录结构。
/** *实现WebMvcConfigurer接口来配置FastJsonHttpMessageConverter, *Spring Boot2.0版本以后推荐使用这种方式来进行web配置,这样不会覆盖掉Spring Boot的一些默认配置. */ @Configuration public class CustomWebMvcConfigurer implements WebMvcConfigurer { @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect); converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName("UTF-8")); converters.add(converter); } }
3.1 fastJson中的SerializerFeature
在fastJson配置实体时,会调用setSerializerFeatures方法,可以配置多个过滤方式,常用的如下:
常用的SerializerFeature释义
QuoteFieldNames,//输出key时是否使用双引号,默认为true; UseSingleQuotes,//使用单引号而不是双引号,默认为false; WriteMapNullValue,//是否输出值为null的字段,默认为false; WriteEnumUsingToString,//Enum输出name()或者original,默认为false; UseISO8601DateFormat,//Date使用ISO8601格式输出,默认为false; WriteNullListAsEmpty,//List字段如果为null,输出为[],而非null; WriteNullStringAsEmpty,//字符类型字段如果为null,输出为"",而非null; WriteNullNumberAsZero,//数值字段如果为null,输出为0,而非null; WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而非null; SkipTransientField,//如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true; SortField,//按字段名称排序后输出,默认为false; @Deprecated WriteTabAsSpecial,//把t做转义输出,默认为false; PrettyFormat,//结果是否格式化,默认为false; WriteClassName,//序列化时写入类型信息,默认为false,反序列化是需用到; DisableCircularReferenceDetect,//消除对同一对象循环引用的问题,默认为false; WriteSlashAsSpecial,//对斜杠'/'进行转义; BrowserCompatible,//将中文都会序列化为uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false; WriteDateUseDateFormat,//全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj,SerializerFeature.WriteDateUseDateFormat); DisableCheckSpecialChar,//一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性,默认为false.
4.创建对象实体
我们创建一个“com.yyg.boot.domain”包,在这里创建一个User实体类。
package com.yyg.boot.domain; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class User { private String name; private String address; }
5.创建Controller
我们创建“com.yyg.boot.web”包,在里面创建一个Controller类。
package com.yyg.boot.web; import com.yyg.boot.domain.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController public class UserController { @RequestMapping(value = "/get", method = RequestMethod.GET) public Object getList() { List<User> list = new ArrayList<>(); //测试字符串有null的情况 User u1 = new User("一一哥", null); list.add(u1); return list; } }
6.创建程序入口类
在项目根目录下创建启动类。
package com.yyg.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 自定义HttpMessageConverter */ @SpringBootApplication public class ConvertApplication { public static void main(String[] args) { SpringApplication.run(ConvertApplication.class, args); } }
整个项目结构:
7.启动类进行测试
启动项目访问http://localhost:8080/users
因为我们CustomWebMvcConfigurer类的代码中没有配置WriteMapNullValue,所以如果返回结果中有null值则不显示,结果如下:
接着我们可以在CustomWebMvcConfigurer中添加WriteMapNullValue,如下图:
然后重新启动项目并访问,从结果可以看出我们配置的消息转换器起作用。
接着我们可以在CustomWebMvcConfigurer中添加WriteNullStringAsEmpty,如下图:
然后重新启动项目并访问,从结果可以看出我们配置的消息转换器又起了作用。

-
springboot传入json和文件_SpringBoot系列教程22-整合SpringMVC之HttpMessageConverters
2020-12-31 13:38:01SpringBoot系列教程22--整合SpringMVC之HttpMessageConverters作者:一一哥一.HttpMessageConverter...但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格...SpringBoot系列教程22--整合SpringMVC之HttpMessageConverters
作者:一一哥
一.HttpMessageConverter简介
1.概述
现在我们进行web开发,一般都要设计成RESTful风格的API,通过json格式的数据进行交互。但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢?
其实这都是由HttpMessageConverter起到的作用!
2.HttpMessageConverter简介
org.springframework.http.converter.HttpMessageConverter 是SpringMVC中提供的一个策略接口,它是一个转换器类,负责转换HTTP请求和响应,可以把对象自动转换为JSON(使用Jackson库或Gson库)或XML(使用Jackson XML或者JAXB2),对字符串默认使用UTF-8编码处理,一般情况下采用默认配置就可以。
该接口说明如下:
Strategy interface that specifies a converter that can convert from and to HTTP requests and responses.
简单说就是 HTTP request (请求)和response (响应)的转换器。该接口里有5个方法,接收到请求时判断是否能读(canRead),能读则读(read);返回结果时判断是否能写(canWrite),能写则写(write),以及获取支持的 MediaType(application/json之类)方法。boolean canRead(Class<?> clazz, MediaType mediaType); boolean canWrite(Class<?> clazz, MediaType mediaType); List<MediaType> getSupportedMediaTypes(); T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException; void write(T t, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
3.HttpMessageConverter转换原理
利用SpringMVC框架,可以使得我们在开发时,只要在代码中使用@RequestBody和@ResponseBody两个注解,就可以分别完成从请求报文到对象和从对象到响应报文的转换。而在源码内部,其实这种灵活的消息转换机制就是利用HttpMessageConverter来实现的。
实现过程参考下图:
SpringMVC在启动时会自动配置一些默认的HttpMessageConverter转换器,在 WebMvcConfigurationSupport 类中添加了缺省的MessageConverter,比如MappingJackson2HttpMessageConverter,StringHttpMessageConverter等。
protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) { StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(); stringConverter.setWriteAcceptCharset(false); messageConverters.add(new ByteArrayHttpMessageConverter()); messageConverters.add(stringConverter); messageConverters.add(new ResourceHttpMessageConverter()); messageConverters.add(new SourceHttpMessageConverter<Source>()); messageConverters.add(new AllEncompassingFormHttpMessageConverter()); if (romePresent) { messageConverters.add(new AtomFeedHttpMessageConverter()); messageConverters.add(new RssChannelHttpMessageConverter()); } if (jackson2XmlPresent) { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.xml().applicationContext(this.applicationContext).build(); messageConverters.add(new MappingJackson2XmlHttpMessageConverter(objectMapper)); } else if (jaxb2Present) { messageConverters.add(new Jaxb2RootElementHttpMessageConverter()); } if (jackson2Present) { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().applicationContext(this.applicationContext).build(); messageConverters.add(new MappingJackson2HttpMessageConverter(objectMapper)); } else if (gsonPresent) { messageConverters.add(new GsonHttpMessageConverter()); } }
从源码中可以看到,SpringMVC中使用Jackson库或Gson库来转换json字符串,使用使用Jackson XML或者JAXB2来转换xml。
而如果我们没有配置自己的 MessageConverter,SpringMVC 启动时就会调用 addDefaultHttpMessageConverters方法。
4.Spring Boot中自定义HttpMessageConverters实现思路
在Spring Boot中我们可以使用HttpMessageConverters添加HttpMessageConverter原生转换类或自定义转换类。
import org.springframework.boot.autoconfigure.web.HttpMessageConverters; import org.springframework.context.annotation.*; import org.springframework.http.converter.*; @Configuration public class MyConfiguration { @Bean public HttpMessageConverters customConverters() { HttpMessageConverter<?> additional = ... HttpMessageConverter<?> another = ... return new HttpMessageConverters(additional, another); } }
从上面的代码示例中,我们看到可以把HttpMessageConverter添加到converters列表,通过这种方式覆盖默认的转换器列表(converters)。
5.自定义消息转换器的方式
我们可以自定义自己的消息转换器来满足特定的需求,一般自定义消息转换器有两种方式:
- 1、使用spring或者第三方提供的现成的HttpMessageConverter;
- 2、自己重写一个HttpMessageConverter。
二.Spring Boot中用FastJsonHttpMessageConverter替换默认转换器
1.创建SpringBoot项目
我们在之前的基础上,新建一个demo10,并将其改造成SpringBoot项目。
2.添加FastJson依赖
在SpringBoot项目中,当我们在控制器类或者其内部的方法上添加@RestController注解和@ResponseBody注解后,默认会使用jackson插件来返回json格式的数据,但是我们也可以利用fastjson为我们提供的FastJsonHttpMessageConverter来返回json格式的数据。
首先引入fastjson的依赖。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.61</version> </dependency>
3.配置FastJsonHttpMessageConverter
我们可以通过实现WebMvcConfigurer接口,来配置FastJsonHttpMessageConverter,在Spring Boot2.0版本以后推荐使用这种方式来进行web配置,这样不会覆盖掉Spring Boot的一些默认配置.
我们创建如下的目录结构。
/** *实现WebMvcConfigurer接口来配置FastJsonHttpMessageConverter, *Spring Boot2.0版本以后推荐使用这种方式来进行web配置,这样不会覆盖掉Spring Boot的一些默认配置. */ @Configuration public class CustomWebMvcConfigurer implements WebMvcConfigurer { @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect); converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName("UTF-8")); converters.add(converter); } }
3.1 fastJson中的SerializerFeature
在fastJson配置实体时,会调用setSerializerFeatures方法,可以配置多个过滤方式,常用的如下:
常用的SerializerFeature释义
QuoteFieldNames,//输出key时是否使用双引号,默认为true; UseSingleQuotes,//使用单引号而不是双引号,默认为false; WriteMapNullValue,//是否输出值为null的字段,默认为false; WriteEnumUsingToString,//Enum输出name()或者original,默认为false; UseISO8601DateFormat,//Date使用ISO8601格式输出,默认为false; WriteNullListAsEmpty,//List字段如果为null,输出为[],而非null; WriteNullStringAsEmpty,//字符类型字段如果为null,输出为"",而非null; WriteNullNumberAsZero,//数值字段如果为null,输出为0,而非null; WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而非null; SkipTransientField,//如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true; SortField,//按字段名称排序后输出,默认为false; @Deprecated WriteTabAsSpecial,//把t做转义输出,默认为false; PrettyFormat,//结果是否格式化,默认为false; WriteClassName,//序列化时写入类型信息,默认为false,反序列化是需用到; DisableCircularReferenceDetect,//消除对同一对象循环引用的问题,默认为false; WriteSlashAsSpecial,//对斜杠'/'进行转义; BrowserCompatible,//将中文都会序列化为uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false; WriteDateUseDateFormat,//全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj,SerializerFeature.WriteDateUseDateFormat); DisableCheckSpecialChar,//一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性,默认为false.
4.创建对象实体
我们创建一个“com.yyg.boot.domain”包,在这里创建一个User实体类。
package com.yyg.boot.domain; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class User { private String name; private String address; }
5.创建Controller
我们创建“com.yyg.boot.web”包,在里面创建一个Controller类。
package com.yyg.boot.web; import com.yyg.boot.domain.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController public class UserController { @RequestMapping(value = "/get", method = RequestMethod.GET) public Object getList() { List<User> list = new ArrayList<>(); //测试字符串有null的情况 User u1 = new User("一一哥", null); list.add(u1); return list; } }
6.创建程序入口类
在项目根目录下创建启动类。
package com.yyg.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 自定义HttpMessageConverter */ @SpringBootApplication public class ConvertApplication { public static void main(String[] args) { SpringApplication.run(ConvertApplication.class, args); } }
整个项目结构:
7.启动类进行测试
启动项目访问http://localhost:8080/users
因为我们CustomWebMvcConfigurer类的代码中没有配置WriteMapNullValue,所以如果返回结果中有null值则不显示,结果如下:
接着我们可以在CustomWebMvcConfigurer中添加WriteMapNullValue,如下图:
然后重新启动项目并访问,从结果可以看出我们配置的消息转换器起作用。
接着我们可以在CustomWebMvcConfigurer中添加WriteNullStringAsEmpty,如下图:
然后重新启动项目并访问,从结果可以看出我们配置的消息转换器又起了作用。

-
java可以存储属性的对象类型_Java如何存储不同类型的对象
2021-02-26 08:53:04我目前正在使用Spring MVC和Hibernate开发我的Web应用程序.仍在学习Java的内部工作原理.我发现自己处于一种需要将数据...这样,我的返回JSON可以在整个api中保持一致.这就是我创建ReturnObject的方式public class R...我目前正在使用Spring MVC和Hibernate开发我的Web应用程序.仍在学习Java的内部工作原理.
我发现自己处于一种需要将数据存储在可以接受不同类型的对象以及一些其他数据字符串的字段中的情况.更准确地说,我想创建一个可以容纳消息,错误代码等的ReturnObject.这样,我的返回JSON可以在整个api中保持一致.
这就是我创建ReturnObject的方式
public class ReturnResponse {
//Set fields
private Object returnObj;
private HttpStatus httpStatus;
private String message;
private String developerMessage;
// Start build
public ReturnResponse(){
this.returnObj = returnObj;
this.httpStatus =.....etc.
}
// Setters... getters...
}
私有对象returnObj;这样该字段可以接受Collection,Maps,Class..etc,但是这样安全吗?
我似乎记得,在字段中声明特定对象类型以确保类型安全始终是一个好习惯.
问题
>您将来会看到可预见的问题吗,有没有更好的方法?
>如果这不是安全类型,我将如何使其更安全.
-
ajax 返回数据,alert后显示object类型,如何处理
2016-09-06 09:15:15今天在做ajax调用webapi接口的时候,用的是fidder调试的。能看到返回的数据是xml,类似于json格式,用alert(data),始终都是object类型的。但是在读取值的时候,始终不知道该如何取值,试了N种方式取值还是取不到。... -
android是如何接受web数据的呀
2016-05-15 06:08:59//获取后台返回的Json对象 JSONObject mJsonObject = JSONUtil.getJSON(BASE_URL); No1.setText("获取成功!"); //测试 JSONArray mJsonArray = mJsonObject.getJSONArray("student"); JSONObject ... -
java response返回数据_HttpMessageConverter是这样转换数据的
2020-12-19 12:08:56那么前端传入的 json 数据如何被解析成 Java 对象作为 API入参,API 返回结果又如何将 Java 对象解析成 json 格式数据返回给前端?其实在整个数据流转过程中,HttpMessageConverter起到了重要作用;本文我们除了关注... -
让你的 wowza 服务器提供 RESTful web 服务
2014-06-13 15:28:11有时我们 nginx 需要和 wowza 服务器交互以进行一些 LB 事宜;...本文以一个简单的 http 发送参数到 wowza,然后 wowza 返回一个 json 为例(经典的 REST 案例),介绍如何让你的 wowza 服务器提供 RESTful web 调 -
使用httpClient进行接口测试
2014-08-21 17:57:09现今很多Web应用开发都是分前后台的,后台开发提供接口调用返回Json对象,前台使用JS框架去加载后台返回的Json.本文以实例简述如何通过HttpClient测试这样的后台接口 处理Json对象的基本API JSON包中最常用的两... -
HttpMessageConverter是这样转换数据的
2020-03-03 11:20:35那么前端传入的 json 数据如何被解析成 Java 对象作为 API入参,API 返回结果又如何将 Java 对象解析成 json 格式数据返回给前端? 其实在整个数据流转过程中,HttpMessageConverter起到了重要作... -
SpringMVC 请求数据通过 HttpMessageConverter 数据转换
2020-02-05 16:32:34那么前端传入的 json 数据如何被解析成 Java 对象作为 API入参,API 返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,其实在整个数据流转过程中,HttpMessageConverter 起到了重要作用;另外在转换的... -
springmvc @requestbody_整合SpringMVC之HttpMessageConverters
2020-11-24 08:18:49但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢?其实这都是由HttpMessageConverter起..... -
整合SpringMVC之HttpMessageConverters
2020-04-21 09:23:29但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢? 其实这都是由HttpMessageConv... -
Web前后端分离开发思路
2021-01-09 00:33:16操作成功则返回200状态和上面的JSON的数据,不同的操作状态有不同的响应数据(为了简单起见只列出了两种,200和404)。 <p>API制定完以后,Alex和Bob就开始编码了。Alex把评论都外观... -
SpringBoot2.x系列教程22--整合SpringMVC之HttpMessageConverters
2020-03-26 08:51:30SpringBoot系列教程22--整合SpringMVC之HttpMessageConverters 作者:一一哥 一.HttpMessageConverter简介 ...但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析... -
2020-08-26
2020-08-26 15:34:58但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢? 其实这都是由HttpMessageConverter起... -
SpringBoot系列教程22-整合SpringMVC之HttpMessageConverters
2020-08-27 15:32:24但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢? 其实这都是由HttpMessageConverter起... -
SpringBoot系列教程21--整合SpringMVC之简介
2020-08-27 15:32:31但是前端传入的 json 数据如何被解析成 Java 对象作为 API入参,后端返回结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢? 其实这都是由HttpMessageConverter起... -
SpringBoot中整合fastjson,自定义jackson、gson
2020-04-09 16:28:51那么前端传入的 json 数据如何序列化成 Java 对象,后端返回的结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个解析过程,HttpMessageConverter 起到了重要作用,各大公司实现了自己... -
Node.js Koa2使用JWT进行鉴权的方法示例
2021-01-20 07:36:38Json Web Token 简称为 JWT,它定义了一种用于简洁、自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。 说得好像跟真的一样,那么到底要... -
✨如何实现一个通用的“划词高亮”在线笔记功能?✨️
2020-12-02 03:40:28需要基于浏览器为我们提供的 <a href="https://developer.mozilla.org/en-US/docs/Web/API/Selection_API">Selection API</a> 。它的;selection">兼容性还不错。如果要支持更低版本的浏览器则需要用 polyfill。 <p>... -
轻量级的.Net微信公众平台SDK.zip
2019-07-19 03:15:553.疑难问题1)API返回的Dynamic对象应该如何使用?答:如果您调用API,return的是 a.由DynamicJson.Parse转换而来,您可以用.[属性名称] 访问到该属性的值; 譬如 BasicAPI.cs中GetAccessToken: var token =... -
AndroidDeals:Android Deals App-源码
2021-03-07 11:19:02处理将返回的JSON反序列化为Kotlin数据对象 以通过URL加载和缓存图像。 它利用了Jetpack库中的以下组件: 使用绑定适配器进行 使用SafeArgs插件,以在片段之间传递参数 屏幕截图 上课时如何使用此仓库 此类中的每个... -
├── zheng-oss -- 对象存储系统 | ├── zheng-oss-sdk -- 开发工具包 | ├── zheng-oss-web -- 前台接口[端口:7771] | └── zheng-oss-admin -- 后台管理[端口:7772] ├── zheng-message -- 实时通知系统...
-
ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1
2013-08-19 05:43:51此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NETAJAX平台。另外,还专门介绍了ASP.NET4 新增的功能,如MVC 和动态数据等。 ... -
ASP.NET.4高级程序设计.part3
2012-12-10 10:21:01此外,本书专门提供了两章的内容来教你如何用ajax 技术制作快速响应的页面,以及如何使用微软的asp.net ajax 平台。另外,还专门介绍了asp.net 4 新增的功能,如mvc 和动态数据等。 《asp.net 4高级程序设计:第4...