responsebody文件|spring MVC @Responsebody 可以将返回对象里面的list集合转为json吗

|

❶ ajax请求返回的是什么responsebody

@responsebody表示该方法的返回结果直接写入HTTP response body中。也就是返回的数据格式。一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

❷ spring mvc 4.0的@responsebody注解为什么不能解析类文件,还是要封装

@responsebody这个是把地址解析成数据类型吧,一般用于ajax请求

❸ asp中ResponseBody获取ppt文件,为什么结果却显示乱码

数据格式不对

❹ Spring5.0 使用 @ResponseBody 返回 Json ,类型转换异常,应该用什么方法处理

在使用 SpringMVC 的时候,我们可能需要将一个对象从 View 传递给 Controller 。而当这个 Object 只是一些简单的 String , int 或者 boolean 类型的成员变量时,SpringMVC 能自动将 View 层的 JSON 包含的 String 类型转换为 Object 成员变量相应的类型。但是当这个 Object 包 Date 类型的成员变量的时候, SpringMVC 在将 String转换成 Date 类型时,就会出错,报异常。但是我们又需要使用 Date 类型的时候,其实 Spring 给我们提供了简单的操作方式可以完成这个任务的。SpringMVC 提供了一个注解 @DateTimeFormat 。可以将 View 传过来的 String类型转换为 Date 类型。具体使用方式很简单,直接在成员变量上加入注解就可以了,同时还可以指定 format 的格式,如下所示:public class Person {private String name;//直接在date类型上加入注解,同时指定格式样式@DateTimeFormat( pattern = "yyyy-MM-dd" )private Date birthday;//setterAndGetter}至此,不要以为完事大吉了,你还需要完成以下两个步骤才可以。第一需要加入 joda 的 jar 包。因为在 @DateTimeFormat 注解中使用到了 joda 包中的相关东西,所以缺少这个包也是会报异常的。如果使用的直接导入 jar 包的话,去下载 joda-Jar 导入即可,如果使用的是 Maven 管理项目的 jar ,那么在配置文件文件中加入依赖:<dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency>第二需要在 SpringMVC 配置 xml 文件中(一般是 dispatchServlet.xml 文件)中加入配置: <mvc:annotation-driven /> 。这一句配置是一种简写,其实是给 spring 容器中注入了两个 Bena ,分别是: 和 。 @DateTimeFormat 注解的内部同样需要使用到前面注入的两个 bean 去处理,所以缺少这个配置, Spring 容器中没有对应的 bean 去处理注解同样也会报错。至此,所有的步骤都完成了,可以跑了。接下来我们跑跑测试一下,测试过程:首先需要一个表单 :<form action="test" method="post"><input type="text" name="name"><input type="text" name="birthday"><input type="submit" name="提交"></form>用一个 Controller 接收:@RequestMapping( "/test" )public ModelAndView test(HttpServletRequest request,@ModelAttribute Person person) {ModelAndView view = new ModelAndView();System.out.println(person.toString());view.setViewName("/test/data");return view;}好了,总结一下整个过程,其实就 3 步:1 、 在 Date 类型的属性上加入 @DateTimeFormat 注解2、 加入 joda 相关的包3、 在 SpringMVC 配置文件中加入 <mvc:annotation-driven />

❺ spring MVC @Responsebody 可以将返回对象里面的list集合转为json吗

可以。在实体类上使用 @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) 标签。

❻ android responsebody 怎么获取数据

OkHttp拦截器 获取Response.body的内容项目中,由于使用了cookie,约定的有效期是20分钟,所以有可以会遇到cookie失效,无权操作,需要再次登录的情况。 在每个地方都进行无权操作error的处理显得不现实,于是就想到了使用拦截器。 但是当使用拦截器获取Response.body.string()后,后面的操作就直接返回Failed了,估计是因为流只能被使用一次的原因。 @Overridepublic Response intercept(Chain chain) throws IOException { Request request = chain.request(); Response response = chain.proceed(request); L.i("response.body.string:" + response.body().string()); return response; }后来,想到设置的 HttpLoggingInterceptor() 拦截器是如何获取到response的body的数据呢 ? OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new HttpLoggingInterceptor() .setLevel(HttpLoggingInterceptor.Level.BODY)) .build(); 于是乎是看了HttpLoggingInterceptor的源码public final class HttpLoggingInterceptor implements Interceptor { private static final Charset UTF8 = Charset.forName("UTF-8"); @Override public Response intercept(Chain chain) throws IOException { Level level = this.level; Request request = chain.request(); //如果Log Level 级别为NONOE,则不打印,直接返回 if (level == Level.NONE) { return chain.proceed(request); } //是否打印body boolean logBody = level == Level.BODY; //是否打印header boolean logHeaders = logBody || level == Level.HEADERS; //获得请求body RequestBody requestBody = request.body(); //请求body是否为空 boolean hasRequestBody = requestBody != null; //获得Connection,内部有route、socket、handshake、protocol方法 Connection connection = chain.connection(); //如果Connection为null,返回HTTP_1_1,否则返回connection.protocol() Protocol protocol = connection != null ? connection.protocol() : Protocol.HTTP_1_1; //比如: –> POST http://121.40.227.8:8088/api http/1.1 String requestStartMessage = "–> " + request.method() + ' ' + request.url() + ' ' + protocol; if (!logHeaders && hasRequestBody) { requestStartMessage += " (" + requestBody.contentLength() + "-byte body)"; } logger.log(requestStartMessage); //打印 Request if (logHeaders) { if (hasRequestBody) { // Request body headers are only present when installed as a network interceptor. Force // them to be included (when available) so there values are known. if (requestBody.contentType() != null) { logger.log("Content-Type: " + requestBody.contentType()); } if (requestBody.contentLength() != -1) { logger.log("Content-Length: " + requestBody.contentLength()); } } Headers headers = request.headers(); for (int i = 0, count = headers.size(); i < count; i++) { String name = headers.name(i); // Skip headers from the request body as they are explicitly logged above. if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(name)) { logger.log(name + ": " + headers.value(i)); } } if (!logBody || !hasRequestBody) { logger.log("–> END " + request.method()); } else if (bodyEncoded(request.headers())) { logger.log("–> END " + request.method() + " (encoded body omitted)"); } else { Buffer buffer = new Buffer(); requestBody.writeTo(buffer); //编码设为UTF-8 Charset charset = UTF8; MediaType contentType = requestBody.contentType(); if (contentType != null) { charset = contentType.charset(UTF8); } logger.log(""); if (isPlaintext(buffer)) { logger.log(buffer.readString(charset)); logger.log("–> END " + request.method() + " (" + requestBody.contentLength() + "-byte body)"); } else { logger.log("–> END " + request.method() + " (binary " + requestBody.contentLength() + "-byte body omitted)"); } } } //打印 Response long startNs = System.nanoTime(); Response response; try { response = chain.proceed(request); } catch (Exception e) { logger.log("<– HTTP FAILED: " + e); throw e; } long tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() – startNs); ResponseBody responseBody = response.body(); long contentLength = responseBody.contentLength(); String bodySize = contentLength != -1 ? contentLength + "-byte" : "unknown-length"; //比如 <– 200 OK http://121.40.227.8:8088/api (36ms) logger.log("<– " + response.code() + ' ' + response.message() + ' ' + response.request().url() + " (" + tookMs + "ms" + (!logHeaders ? ", " + bodySize + " body" : "") + ')'); if (logHeaders) { Headers headers = response.headers(); for (int i = 0, count = headers.size(); i < count; i++) { logger.log(headers.name(i) + ": " + headers.value(i)); } if (!logBody || !HttpEngine.hasBody(response)) { logger.log("<– END HTTP"); } else if (bodyEncoded(response.headers())) { logger.log("<– END HTTP (encoded body omitted)"); } else { BufferedSource source = responseBody.source(); source.request(Long.MAX_VALUE); // Buffer the entire body. Buffer buffer = source.buffer(); Charset charset = UTF8; MediaType contentType = responseBody.contentType(); if (contentType != null) { try { charset = contentType.charset(UTF8); } catch (UnsupportedCharsetException e) { logger.log(""); logger.log("Couldn't decode the response body; charset is likely malformed."); logger.log("<– END HTTP"); return response; } } if (!isPlaintext(buffer)) { logger.log(""); logger.log("<– END HTTP (binary " + buffer.size() + "-byte body omitted)"); return response; } if (contentLength != 0) { logger.log(""); //获取Response的body的字符串 并打印 logger.log(buffer.clone().readString(charset)); } logger.log("<– END HTTP (" + buffer.size() + "-byte body)"); } } return response; } /** * Returns true if the body in question probably contains human readable text. Uses a small sample * of code points to detect unicode control characters commonly used in binary file signatures. */ static boolean isPlaintext(Buffer buffer) throws EOFException { try { Buffer prefix = new Buffer(); long byteCount = buffer.size() < 64 ? buffer.size() : 64; buffer.To(prefix, 0, byteCount); for (int i = 0; i < 16; i++) { if (prefix.exhausted()) { break; } int codePoint = prefix.readUtf8CodePoint(); if (Character.isISOControl(codePoint) && !Character.isWhitespace(codePoint)) { return false; } } return true; } catch (EOFException e) { return false; // Truncated UTF-8 sequence. } } private boolean bodyEncoded(Headers headers) { String contentEncoding = headers.get("Content-Encoding"); return contentEncoding != null && !contentEncoding.equalsIgnoreCase("identity"); }}然后,根据HttpLoggingInterceptor,就很容易得到responsebody的内容了 /** * @Description 异常处理 拦截器 * Created by EthanCo on 2016/7/14. */public class ErrorHandlerInterceptor implements Interceptor { private static final Charset UTF8 = Charset.forName("UTF-8"); @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Response response = chain.proceed(request); ResponseBody responseBody = response.body(); long contentLength = responseBody.contentLength(); //注意 >>>>>>>>> okhttp3.4.1这里变成了 !HttpHeader.hasBody(response) //if (!HttpEngine.hasBody(response)) { if(!HttpHeader.hasBody(response)){ //END HTTP } else if (bodyEncoded(response.headers())) { //HTTP (encoded body omitted) } else { BufferedSource source = responseBody.source(); source.request(Long.MAX_VALUE); // Buffer the entire body. Buffer buffer = source.buffer(); Charset charset = UTF8; MediaType contentType = responseBody.contentType(); if (contentType != null) { try { charset = contentType.charset(UTF8); } catch (UnsupportedCharsetException e) { //Couldn't decode the response body; charset is likely malformed. return response; } } if (!isPlaintext(buffer)) { L.i("<– END HTTP (binary " + buffer.size() + "-byte body omitted)"); return response; } if (contentLength != 0) { String result = buffer.clone().readString(charset); //获取到response的body的string字符串 //do something …. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< } L.i("<– END HTTP (" + buffer.size() + "-byte body)"); } return response; } static boolean isPlaintext(Buffer buffer) throws EOFException { try { Buffer prefix = new Buffer(); long byteCount = buffer.size() < 64 ? buffer.size() : 64; buffer.To(prefix, 0, byteCount); for (int i = 0; i < 16; i++) { if (prefix.exhausted()) { break; } int codePoint = prefix.readUtf8CodePoint(); if (Character.isISOControl(codePoint) && !Character.isWhitespace(codePoint)) { return false; } } return true; } catch (EOFException e) { return false; // Truncated UTF-8 sequence. } } private boolean bodyEncoded(Headers headers) { String contentEncoding = headers.get("Content-Encoding"); return contentEncoding != null && !contentEncoding.equalsIgnoreCase("identity"); }}

❼ 如何彻底解决SpringMVC4.0下使用解决@ResponseBody 中文乱码问题

SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.converter.StringHttpMessageConverter类中可以看到如下代码:public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1"); 解决返回中文乱码的问题有两种,第一种是局部的,只针对于某个方法的返回进行处理,第二种是全局的,针对于整个项目,如下:第一种:在@RequestMapping中添加proces="text/html;charset=UTF-8,如:[html] view plain@RequestMapping(value="/login.do",method=RequestMethod.POST,proces="text/html;charset=UTF-8") @ResponseBody public String login(@RequestParam(value="username") String userName,@RequestParam(value="password") String password){ return JSONMessageUtil.getSuccessJSON("登录成功"); } 第二种:在配置文件中的mvc:annotation-driven中添加如下代码:[html] view plain<mvc:annotation-driven > <!– 消息转换器 –> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <mvc:resources location="/resources/" mapping="/resources/**" />

❽ 如何用@ResponseBody注解实现实体与json的转换

js与java是不同语言,运行在不同环境下,因此无法直接获得对方数据。java运行在服务器端,在同一个jsp文件中,java先运行,js后运行,java可以生成一段js代码,保证js运行得到相应的结果,因此可以用java定义js变量的方式来传递数据,例如:1234 <script>var url="<%=url%>";alert(username);</script>上面例子,<%%>中的内容会在服务器端运行,在“”中间输出网址,浏览器就会加载下面的结果:1234 <script>var url="gif8.cn";alert(url);</script>这部分就是标准的js代码了。

❾ @responsebody一般在什么情况下使用,他的好处与坏处

@responsebody表示该方法的返回结果直接写入HTTP response body中。它的使用情况如下:1、一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。2、一般是指定要response 的type。比如json 或 xml 可以直接用jackson或jaxb的包,然后就可以自动返回了,xml中也无需多的配置,就可以使用。好处是:GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。@ResponseBody可以标注任何对象,由Srping完成对象——协议的转换。坏处是:返回之前,若前端编码格式不一致,很容易导致乱码。

❿ 关于Spring MVC中@ResponseBody怎么知道我需要什么类型

对于Struts 如何控制、处理客户请求,让我们通过对struts的四个核心组件介绍来具体说明。这几个组件就是:ActionServlet。Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean。 二、Spring Spring实际上是《Expert One-on-One J2EE Design and Development》一书中所阐述的设计思想的具体实现。在One-on-One一书中,Rod Johnson 倡导J2EE 实用主义的设计思想,并随书提供了一个初步的开发框架实现(interface21 开发包)。而Spring 正是这一思想的更全面和具体的体现。Rod Johnson在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。 Spring是一个开源框架,由Rod Johnson创建并且在他的著作《J2EE设计开发编程指南》里进行了描述。它是为了解决企业应用开发的复杂性而创建的。Spring使使用基本的JavaBeans来完成以前只可能由EJB完成的事情变得可能了。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量的控制反转和面向切面的容器框架。当然,这个描述有点过于简单。但它的确概括出了Spring是做什么的。为了更好地理解Spring,让我们分析一下这个描述: 1、轻量 从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于轻量,从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 2、控制反转 Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,对象被动地传递它们的依赖而不是自己创建或者查找依赖对象。你可以认为IoC与JNDI相反不是对象从容器中查找依赖,而是容器在对象初始化时不等被请求就将依赖传递给它。 3、面向切面 Spring包含对面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统服务(例如审计与事物管理)进行内聚性的开发。应用对象只做它们应该做的,完成业务逻辑,仅此而已。它们并不负责(甚至是意识)其它的系统关注点,例如日志或事物支持。 4、容器 Spring包含和管理应用对象的配置和生命周期,在这个意义上它是一种容器。你可以配置你的每个bean如何被创建基于一个配置原形为你的bean创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量的EJB容器,它们经常是庞大与笨重的,难以使用。 框架:Spring是由简单的组件配置和组合复杂的应用成为可能。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久性框架集成等等),将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种子框架提供了基础。


赞 (0)