response返回json对象,python response json

http://www.itjxue.com  2023-01-21 12:59  来源:未知  点击次数: 

@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

(责任编辑:IT教学网)

更多