response返回json对象,python response json
@ResponseBody返回json字符串的问题
@ResponseBody可以返回json格式的响应,JSON格式是String类型,所以请求方法的返回值类型应该是String
@RequestMapping(path="/test")
public @ResponseBody
String test1(HttpServletResponse resp) {
resp.setContentType("application/json;charset=UTF-8");
user us =new user();
us.setUsername("zhangsan");
us.setPassword("123");
return us.toString();
}
但是仅仅如此是不够的,需要在xml中进行配置
bean id="stringConverter"
? ? ? class="org.springframework.http.converter.StringHttpMessageConverter"
property name="supportedMediaTypes"
list
valuetext/plain;charset=UTF-8/value
/list
/property
/bean
bean id="jsonConverter"
? ? ? class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/bean
bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
property name="messageConverters"
list
ref bean="stringConverter" /
ref bean="jsonConverter" /
/list
/property
/bean
此时,前端可以接收到JSON字符串
这里我使用的jackson包:
jackson-core、jackson-databind、jackson-annotation
@ResponseBody不一定返回json
我们先来公布正确的答案。
@ResponseBody 的输出格式,默认情况取决于客户端的 Accept 请求头。
application/xml | text/xml | application/*+xml
Http报头分为通用报头,请求报头,响应报头和实体报头。
请求方的http报头结构:通用报头|请求报头|实体报头
响应方的http报头结构:通用报头|响应报头|实体报头
比如:Accept:text/xml(application/json);
代表客户端希望接受的数据类型是xml(json )类型
Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。
比如:Content-Type:text/html(application/json) ;
代表发送端发送的数据格式是html(json)。
二者合起来,
Accept:text/xml;
Content-Type:text/html
即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html。
如果accept指定的类型和response返回的类型不一致,会出现406,not acceptable错误,对应到java spring工程,就是
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON_UTF8_VALUE.toString());
如果head头里加了accept,那么@RequestMapping里的 produces = "*/*" 或 produces = "application/json"
Conteny-Type:内容类型,即请求/响应的内容区数据的媒体类型
Accept:用来指定什么媒体类型的响应是可接受的,即告诉服务器我需要什么媒体类型的数据,此时服务器应该根据Accept请求头生产指定媒体类型的数据。
问题:
服务器端可以通过指定【headers = “Content-Type=application/json”】来声明可处理(可消费)的媒体类型,即只消费Content-Type指定的请求内容体数据;
客户端如何告诉服务器端它只消费什么媒体类型的数据呢?即客户端接受(需要)什么类型的数据呢?服务器应该生产什么类型的数据?此时我们可以请求的Accept请求头来实现这个功能。
上面两个例子都表示了request请求中Accept头中包含了"application/json"的请求,同时暗示了返回的内容类型为application/json:
produces标识:produces="application/json"
headers = "Accept=application/json"
其中request Content-Type为“application/json”类型的请求.
当你有如下Accept头,将遵守如下规则进行应用:
apifox接口文档怎么返回响应json对象
(1)管理环境--新建环境,或者是本机自带的环境,添加url前缀。host+端口等。
(2)可在全局参数里,添加cookie,和代码传参一样,放在header里。
(3)引用全局参数:{{cookie}}。(和postman相比,少了一个get variable的步骤)。
(4)也可以在全局或者当前环境下,将某个数据设为变量。
(5)apifox在创建新的接口名称后,先保存。可以对文档进行修改和前后置操作。
前置操作:连接数据库,提取变量
后置操作:提取变量断言
APIfox 将开发的接口文档和测试的接口测试结合在一起。
接口文档发生了改变(如参数),接口测试不用改。测试只需要改动测试的前置和断言。
建立一个api文档:输入url,请求参数和响应结果(做测试参考):
如:响应码:200,选择raw,响应示例,应该输入文字
如:响应码:200,返回的是一个json格式,则内容格式选择json,并可以自动生成mock的值。然后在添加示例里面,可以自动生成响应的示例。(接口文档中返回的响应的格式仅仅是作为格式的参考,是mock的,虚拟的。是方便开发编数据。)
真正的响应值要根据请求参数来。
一个完整的接口测试流程:
先在环境中,输入url前置。然后在新建接口里,输入参数值;之后在后置里面实现断言。
thinkphp中怎么返回json数据
使用thinkphp框架开发,不知道如何返回JSON字符串,ajax无法调用 有三种方式可以返回
1、若是数据库实体,可以使用toJson()方法
$user = User::get(1); echo $user-toJson();
2、若非数据库实体,可以使用json view方法,thinkphp除了实现response对象,还实现了jsonResponse若非数
$data = [??? 'result'='success',??? 'msg'='操作成功!' ]; //class Json extends Response
return json($data);
3、若非数据库实体,可以使用json_encode()方法:
$data = [??? 'result'='success',??? 'msg'='操作成功!' ];
return json_encode($data);
thinkphp5 ajax如何返回json