1、代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | package com.jay.controller; import com.jay.pojo.User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; //使用注解自动装配 @Controller //一级目录,这个Controller下的所有视图访问的时候都要拼接/home public class HelloController { //访问路径 //@RequestMapping("/hello") @GetMapping( "/hello/{a}/{b}" ) //get请求,restful风格的url //@PostMapping("/hello/{a}/{b}")//post请求 //restful风格的路径,简洁、高效(支持缓存)、安全(隐藏参数名) public String hello(@PathVariable int a, @PathVariable int b, Model model) { int c = a + b; model.addAttribute( "c" , c); //Model用来存储视图数据,jsp页面可以直接取出 model.addAttribute( "msg" , "Hello SpringMVCAnnotation!" ); // return "hello";//视图名 //没有视图解析器时,用下面三种方法跳转 // return "/WEB-INF/view/hello.jsp";//视图路径 // return "forward:/WEB-INF/view/hello.jsp";//转发 return "redirect:/test" ; //重定向到指定的url // return "redirect:/index.jsp";//重定向到指定的jsp页面 //注意路径,斜杠/直接到webapp目录下 } //http://localhost:9091/hello/1/2 @RequestMapping( "/test" ) public String test(Model model) { model.addAttribute( "msg" , "test xxxxxx" ); // return "/WEB-INF/view/test.jsp";//没有视图解析器的方式 return "test" ; } //如果多个视图,写多个hello这样的方法就可以了,不用每个都写一个servlet。 @RequestMapping( "/test1" ) public String test1(@RequestParam( "username" ) String username, Model model) { //@RequestParam配置前端参数只能传username,否则报错 model.addAttribute( "msg" , username); return "test1" ; } //http://localhost:9091/test2?age=19&id=1&username=jay @RequestMapping( "/test2" ) public String test2(User user, Model model) { //使用对象接收前端参数,会自动绑定到user对应的属性中 model.addAttribute( "msg" , user.toString()); return "test2" ; } } |
json使用,jackson和fastjson包 https://www.cnblogs.com/dmego/p/9033080.html
1 2 3 4 5 6 7 | @RequestMapping( "/test4" ) @ResponseBody //不使用视图解析器,直接返回字符串 public String test4() { User user = new User(1, "jay.star" , 23); String str = JSON.toJSONString(user); return str; } |
2、fastjson https://www.cnblogs.com/dmego/p/9033080.html
fastjson常用api:
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。
3、返回字符串中文乱码:
方式一、@RequestMapping(value = "/test4",produces = "application/json;charset=utf-8")
方式二、spring配置,使用jackson的包,不用fastjson了,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- 1.开启SpringMVC注解驱动 JSON乱码问题配置 --> <mvc:annotation-driven> <mvc:message-converters register-defaults= "true" > <bean class = "org.springframework.http.converter.StringHttpMessageConverter" > <constructor-arg value= "utf-8" /> </bean> <bean class = "org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" > <property name= "objectMapper" > <bean class = "org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" > <property name= "failOnEmptyBeans" value= "false" /> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> |
jackson
1 2 3 4 5 6 7 8 | @RequestMapping(value = "/test4" ) @ResponseBody public String test4() throws JsonProcessingException { User user = new User(1, "星期五" , 23); ObjectMapper mapper = new ObjectMapper(); String res = mapper.writeValueAsString(user); return res; } |
4、 使用@RestController注解Controller,其下所有方法都不会再走视图解析器,全部返回字符串,前后端分离时,写接口给前端调用。
5、自定义DateFormat的JsonUtils
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package com.jay.utils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import java.text.SimpleDateFormat; 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(dateFormat); mapper.setDateFormat(sdf); String res = null ; try { res = mapper.writeValueAsString( object ); } catch (JsonProcessingException e) { e.printStackTrace(); } return res; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】