1、代码
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
@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.开启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
@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
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; } }