• java之SpringMVC学习(二)使用注解、跳转、重定向、参数接收、输出JSON


    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;
        }
    }
    
  • 相关阅读:
    低级错误之Hbm中类型不一致错误
    低级错误之Oracle客户端添加数据
    低级错误之页面中action的请求地址与action中写的requsetmapping不一致
    低级错误之删除存在关联的表报错
    低级错误之方法自调陷入死循环
    Notepad++的一些常用的快捷键
    [css]inline-block
    框架开发之Java注解的妙用
    面试必备【含答案】Java面试题系列(二
    Kotlin:数组、字符串模板
  • 原文地址:https://www.cnblogs.com/xsj1989/p/15099749.html
Copyright © 2020-2023  润新知