企业网站开发实训心得,公众号开发者密码重置,网站设计的技术选择,科技企业网站1、题外话
前后端分离时代 后端部署后端#xff0c;提供接口#xff0c;提供数据 json 前端独立部署#xff0c;负责渲染后端的数据 2、什么是JSON
JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式#xff0c;目前使用特别广泛。 ●采用完全独立…1、题外话
前后端分离时代 后端部署后端提供接口提供数据 json 前端独立部署负责渲染后端的数据 2、什么是JSON
JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式目前使用特别广泛。 ●采用完全独立于编程语言的文本格式来存储和表示数据。 ●简洁和清晰的层次结构使得JSON成为理想的数据交换语言。 ●易于人阅读和编写同时也易于机器解析和生成并有效地提升网络传输效率。 在JavaScript语言中一切都是对象。因此任何JavaScript 支持的类型都可以通过JSON来表示例如字符串、数字、对象、数组等。看看他的要求和语法格式: ●对象表示为键值对数据由逗号分隔 ●花括号保存对象 ●方括号保存数组 JSON键值对是用来保存JavaScript对象的一种方式和JavaScript对象的写法也大同小异键/值对组合中的键名写在前面并用双引号包裏使用冒号:分隔然后紧接着值: {“name”: “QinJiang”} {“age”: “3” } {“sex”: “男”} ●JSON是JavaScript对象的字符串表示法它使用文本表示一个JS对象的信息本质是一个字符串。 var obj {a: ‘Hello’, b: ‘World’}; //这是一个对象注意键名也是可以使用引号包裹的 var json ‘{“a”: “Hello, “b”: “World”}’; //这是一个JSON 字符串本质是:一个字符串 JSON和JavaScript对象互转
●要实现从JSON字符串转换为JavaScript对象使用JSON.parse()方法: var obj JSON.parse(’{“a”: “He1lo”,“b”: “World”}’); //结果是{a: ‘Hello’,b: ‘World’} ●要实现从JavaScript对象转换为JSON字符串使用JSON.stringify() 方法: var json JSON.stringify({a: ‘Hello’, b: ‘World’}); //结果是’{“a”: “Hello”, b”: “World”} 3、Controller返回JSON数据
3.1 jackson的使用 ●Jackson应该是目前比较好的json解析工具了 ●当然工具不止这一个比如还有阿里巴巴的fastjson等等。 ●使用Jackson需要导入它的jar包; 1在pom.xml中导入它的依赖
dependenciesdependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.11.4/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.16.10/version/dependency/dependencies2配置web.xml
?xml version1.0 encodingUTF-8?
web-app xmlnshttps://jakarta.ee/xml/ns/jakartaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttps://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsdversion5.0!--1 配置DispatcherServlet这个是SpringMVC的核心请求分发器前端控制器--servletservlet-namespringmvc/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!--关联一个spring的配置文件: [servlet-name]-servlet.xmL--init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc-servlet.xml/param-value/init-paramload-on-startup1/load-on-startup/servlet!--/匹配所有的请求: (不包括.jsp) --!--/*匹配所有的请求; (包括.jsp) --servlet-mappingservlet-namespringmvc/servlet-nameurl-pattern//url-pattern/servlet-mapping!--2.配置SpringMVC的乱码过滤--filterfilter-nameencoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueutf-8/param-value/init-param/filterfilter-mappingfilter-nameencoding/filter-nameurl-pattern/*/url-pattern/filter-mapping/web-app(3)新建并配置关联的springmvc-servlet.xml文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd!--自动扫描指定的包下面所有注解类交给IOC容器管理--context:component-scan base-packagecom.kuang.controller/mvc:default-servlet-handler/mvc:annotation-driven /!-- 视图解析器--bean classorg.springframework.web.servlet.view.InternalResourceViewResolveridinternalResourceViewResolver property nameprefix value/WEB-INF/jsp/ /property namesuffix value.jsp //bean
/beans4我们随便编写一个User的实体类然后我们去编写我们的测试Controller
package com.kuang.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;Data //等同于getter and Setter
AllArgsConstructor //生成带参构造器
NoArgsConstructor //生成无参构造器
public class User {private int id;private String name;private int age;
}5测试Controller类
下述代码返回的是一个user对象的字符串格式。User( id3, name??1?,age 19)
package com.kuang.controller;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kuang.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;Controller
public class UserController {RequestMapping(/j1)ResponseBody //他就不会走视图解析器会直接返回一个字符串public String json1() {//创建一个对象User user new User(3,秦疆1号,19);return user.toString();}
}下述代码返回的则是一个Json格式{“id”:3,“name”:??1?,“age”:19}
package com.kuang.controller;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kuang.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
Controller
public class UserController {RequestMapping(/j1)ResponseBody //他就不会走视图解析器会直接返回一个字符串public String json1() throws JsonProcessingException {//jackson,ObjectMapperObjectMapper mapper new ObjectMapper();//创建一个对象User user new User(3,秦疆1号,19);String str mapper.writeValueAsString(user);return str;//return user.toString();}
}6HTTP Status 500 - Servlet.init() for servlet springmvc threw exception type Exception report message Servlet.init() for servlet springmvc threw exception description The server encountered an internal error that prevented it from fulfilling this request. root causeorg.springframework.beans.factory.BeanCreationException: Error creating bean with name userController: Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.kuang.controller.UserController] from ClassLoader [WebappClassLoaderjava.lang.IllegalStateException: Failed to introspect Class [com.kuang.controller.UserController] from ClassLoader [WebappClassLoaderjava.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException试试关于java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException解决方法 以及记 Idea lib导包 500 错误_波拿巴的博客-CSDN博客 我是根据第二篇博文解决的我修改了pom.xml中的依赖为
dependenciesdependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.11.4/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.11.4/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.11.4/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.16.10/version/dependency/dependencies然后重新在 lib下加入好了之后再启动的tomcat就可以了
(7)发现出现了乱码问题
乱码是因为它只是将字符串输出到当前页面没有通过向前端发送请求也没有过视图解析器自然也就没有走srpingmvc配置文件中的乱码过滤步骤。
我们需要设置一下他的编码格式为utf-8, 以及它返回的类型; 通过** RequestMaping的produces属性**来实现修改下代码
Controller
public class UserController {RequestMapping(value /j1,produces application/json;charsetutf-8)ResponseBody //他就不会走视图解析器会直接返回一个字符串public String json1() throws JsonProcessingException {//jackson,ObjectMapperObjectMapper mapper new ObjectMapper();//创建一个对象User user new User(3,秦疆1号,19);String str mapper.writeValueAsString(user);return str;//return user.toString();}
}结果 上一种方法比较麻烦如果项目中有许多请求则每一个都要添加 可以通过Spring配置统一指定这样就不用每次都去处理了! 在springmvc的配置文件上添加一段消息StringHttpMessageConverter转换配置!
!--JSON乱码问题配置--mvc:annotation-drivenmvc:message-converters register-defaultstruebean classorg.springframework.http.converter.StringHttpMessageConverterconstructor-arg valueUTF-8//beanbean classorg.springframework.http.converter.json.MappingJackson2HttpMessageConverterproperty nameobjectMapperbean classorg.springframework.http.converter.json.Jackson2ObjectMapperFactoryBeanproperty name failOnEmptyBeans value false//bean/property/bean/mvc:message-converters/mvc:annotation-driven重启一下再看效果就对了
8返回集合
//返回一个集合RequestMapping(/j2)public String json2() throws JsonProcessingException {ObjectMapper mapper new ObjectMapper();ArrayListObject list new ArrayList();User user1 new User(3,秦疆1号,19);User user2 new User(3,秦疆1号,19);User user3 new User(3,秦疆1号,19);User user4 new User(3,秦疆1号,19);list.add(user1);list.add(user2);list.add(user3);list.add(user4);String str mapper.writeValueAsString(list);return str;}效果
9返回时间戳
RequestMapping(/j3)public String json3() throws JsonProcessingException {ObjectMapper mapper new ObjectMapper();// objectMapper, 时间解析后的默认格式为: Timestamp(时间戳)Date date new Date();return mapper.writeValueAsString(date);}RequestMapping(/j3)public String json3() throws JsonProcessingException {ObjectMapper mapper new ObjectMapper();// objectMapper, 时间解析后的默认格式为: Timestamp(时间戳)Date date new Date();//自定义日期格式SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss ) ;return mapper.writeValueAsString(sdf.format(date));}RequestMapping(/j3)public String json3() throws JsonProcessingException {ObjectMapper mapper new ObjectMapper();// objectMapper, 时间解析后的默认格式为: Timestamp(时间戳)//不使用时间戳的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);//自定义日期格式SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss ) ;mapper.setDateFormat(sdf);Date date new Date();return mapper.writeValueAsString(date);}抽取为JSON工具类
public class JsonUtils {public static String getJson(Object object){return getJson(object,yyyy-MM-dd HH:mm:ss);}public static String getJson(Object object, String dateFormat){ObjectMapper mapper new ObjectMapper();//不使用时间戳的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);//自定义日期格式SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss ) ;mapper.setDateFormat(sdf);try {return mapper.writeValueAsString(object);} catch (JsonProcessingException e) {e.printStackTrace();}return null;}