旅游网站建设目标分析,学校资源网站的建设方案,做网站后期维护工资贴吧,网站备案变更接入Java知识点总结#xff1a;想看的可以从这里进入 目录3.4、JSON数据3.4.1、前端使用3.4.2、后端使用1、Jackson2、fastjson3.5、RestFul风格3.5.1、简介3.5.2、使用3.4、JSON数据
3.4.1、前端使用
前端在JavaScript中有封装的JSON对象#xff0c;可以直接用来操作JSON数据。… Java知识点总结想看的可以从这里进入 目录3.4、JSON数据3.4.1、前端使用3.4.2、后端使用1、Jackson2、fastjson3.5、RestFul风格3.5.1、简介3.5.2、使用3.4、JSON数据
3.4.1、前端使用
前端在JavaScript中有封装的JSON对象可以直接用来操作JSON数据。 将对象转化成JSON数据 JSON.stringify(对象名);将JSON转化为对象 JSON.parse(JSON数据名);3.4.2、后端使用
前端可以直接使用但是在后端使用JSON数据需要引入第三方来实现快捷的操作比如Jackson、fastjson等在使用前需要先导入相应的依赖。
1、Jackson
这种方式最好是创建一个专门的Util类来辅助我们使用JSON数据 添加依赖 !--Jackson的依赖--
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.4/version
/dependency创建Util类 public class JSONUtil {public static String getJSON(Object o) throws JsonProcessingException {return getJSON(o,yyyy-MM-dd hh:mm:ss);}//将对象封装成JSON格式的数据public static String getJSON(Object o,String dateFormat) throws JsonProcessingException {ObjectMapper mapper new ObjectMapper();mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);SimpleDateFormat sdf new SimpleDateFormat(dateFormat);mapper.setDateFormat(sdf);return mapper.writeValueAsString(o);}
}测试 RequestMapping(f1)
ResponseBody
public String JSONTest() throws JsonProcessingException {User user1 new User(1,张三);User user2 new User(2,李四);ListUser userList new ArrayList();userList.add(user1);userList.add(user2);return JSONUtil.getJSON(userList);
}当然除了创建Util帮助类外还可以利用Spring的消息转换机制 配置 MappingJackson2HttpMessageConverter他会自动将返回的对象转化为JSON格式数据。
!--配置JSON格式的转换器--
bean idjsonConverter classorg.springframework.http.converter.json.MappingJackson2HttpMessageConverterproperty namesupportedMediaTypeslistvalueapplication/json;charset-UTF-8/value/list/property
/beanbean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterproperty namemessageConverterslistref beanjsonConverter//list/property
/bean2、fastjson
fastjson有三个重要的类JSONObject(代表JSON对象)JSONArray(代表JSON数组)JSON(JSONObject和JSONArray的转化) 添加依赖 !--fastjson的依赖--
dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.76/version
/dependency测试 //List对象转化成JSON字符串
JSON.toJSONString(userList);
//对象转化成JSON字符串
JSON.toJSONString(user1);
//JSON转化成List
ListUser userList1 JSON.parseArray(s, User.class);
//JSON转化成对象
User user JSON.parseObject(s1, User.class);3.5、RestFul风格
3.5.1、简介
RestFulRepresentational State Transfer表现层资源状态转移。风格是一种当前比较流行的互联网软件架构模式它利用HTTP 协议的特性规定了一套资源获取的方式它可以使软件更简洁更有层次易于实现缓存等机制。
在 web开发中Rest使用HTTP协议连接器来标识对资源的操作用 HTTP GET标识获取查询资源HTTP POST标识创建资源HTTP PUT标识修改资源HTTP DELETE标识删除资源这样就构成了 Rest风格数据处理的核心它的增删改查在在Controller中通过四种注解来区分也可以用RequestMapping的属性method
资源操作对应注解HTTP 请求方式获取资源SELECTGetMapping、RequestMapping(value “”,method RequestMethod.GET)GET新增资源INSERTPostMappingRequestMapping(value “”,method RequestMethod.POST)POST修改资源UPDATEPutMappingRequestMapping(value “”,method RequestMethod.PUT)PUT删除资源DELETEDeleteMappingRequestMapping(value “”,method RequestMethod.DELETE)DELETE传统的资源操作是通过 ? 等符号将参数拼接起来的如果要区分提交、删除等操作是用不同的请求路径完成的 获取http://localhost:8080/getUserById?id1 修改http://localhost:8080/updateUser?id1 新增http://localhost:8080/insertUser?id1 删除http://localhost:8080/deleteUserById?id1 Controller
public class RestfulController {RequestMapping(getUserById)public String getUserById(int id, Model model){}RequestMapping(updateUser)public String updateUser(int id, Model model){}RequestMapping(insertUser)public String insertUser(int id, Model model){}RequestMapping(deleteUserById)public String deleteUserById(int id, Model model){}
}RestFul 是将参数作为 URL 的一部分发送到服务器中它的增删改查的路径可以是一样的 http://localhost:8080/user/1 Controller
public class RestfulController {GetMapping(/user/{id})public String getUserById(PathVariable(id)int id, Model model){}PostMapping(/user/{id})public String updateUser(PathVariable(id)int id, Model model){}PutMapping(/user/{id})public String insertUser(PathVariable(id)int id, Model model){}DeleteMapping(/user/{id})public String deleteUserById(PathVariable(id)int id, Model model){}
}3.5.2、使用
我们知道表单提交只要2 种方式get和post那么put和delete的提交怎么实现呢
在Spring中提供了一个过滤器HiddenHttpMethodFilter它可以对请求进行过滤可以将请求转换成HTTP方式但是它的转换是有一定条件的
只能将Post的请求转换成 put 或 delete必须携带一个name为 _method 的参数。
在满足了以上条件后HiddenHttpMethodFilter 过滤器就会根据请求参数 _method 的值改变请求的方式即请求参数 _method 的值才是最终的请求方式因此我们需要在 POST 请求中携带一个名为 _method 的参数参数值为 DELETE 或 PUT。
这个过滤器需要在 web.xml中进行配置
!-- Rest风格URL路径映射(需要将这个过滤器配置在字符编码的过滤器之后才行)--
filterfilter-namehiddenHttpMethodFilter/filter-namefilter-classorg.springframework.web.filter.HiddenHttpMethodFilter/filter-class
/filter
filter-mappingfilter-namehiddenHttpMethodFilter/filter-nameurl-pattern/*/url-pattern
/filter-mapping在配置好过滤器后进行测试 测试POST转为Put提交测试Delete将_method的值改为DELETE即可 form action${pageContext.request.contextPath}/putTest methodpost!--用来将POST转为Put--input typehidden name_method valuePUT/!--用来将POST转为DELETE--!--input typehidden name_method valueDELETE/--姓名input class idname namename size50 typetext value/住址input class idtitle nameaddress size50 value typetext/年龄input class nameage size50 value typetext/介绍textarea nameinformation class idcontent rows10/input class value提交 typesubmit/input class onclickhistory.go(-1) value返回 typebutton/
/form//put提交就意味着要修改资源所以在实际操作中会去service和dao中进行修改的操作
PutMapping(putTest)
ResponseBody
public String putTest(User user, Model model){return String.format(姓名%s地址%s年龄%s介绍%s,user.getName(),user.getAddress(),user.getAge(),user.getInformation());
}