SpringMVC [Контроллер разработки] Подробное объяснение

Java Spring

предисловие

В этой статье в основном объясняется разработка в Контроллере.Основные точки знаний заключаются в следующем:

  • кодирующий фильтр
  • Разработка с аннотациями
  • аннотация@RequestMappingДетальное объяснение
  • Бизнес-метод получает параметры
  • Строка на сегодняшний день
  • перенаправить и вперед
  • вернуть JSON

Кодировщик фильтра SpringMVC

В контроллере SpringMVC, если над кодировкой не производится никаких операций, полученные китайские данные искажаются!

这里写图片描述

Даже если мы находимся в методе handle(), установка кодировки с помощью объекта запроса не работает! Причина также очень проста, мыSpringMVC получает параметры через метод построения без параметров в контроллере, а затем через объектный объект метода handle(), чтобы получить конкретный тип параметра..

Struts2 использует перехватчики, чтобы автоматически решить проблему с искаженными китайскими иероглифами. Тогда SpringMVC, как более мощный фреймворк, должен иметь соответствующие методы, которые помогут нам решить проблему искаженных китайских символов!

Стоит отметить, что:Этот кодировщик фильтра может решить только искаженную проблему POST.!

нам просто нужноПросто установите кодировщик фильтра в файле конфигурации web.xml.!


    <!-- 编码过滤器 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

这里写图片描述


Разработка аннотаций SpringMVC

Мы используем метод конфигурации XML для использования SpringMVC в примере быстрого запуска,SpringMVC также может поддерживать аннотации.. [Лично мне очень нравится способ аннотации]

Когда мы используем Action, мы либо наследуем класс AbstractCommandController, либо отображаем интерфейс Controller с помощью аннотаций.Когда мы используем аннотации, нам не нужно явно наследовать или реализовывать какие-либо классы.!

Процесс разработки

Используйте аннотацию @Controller, чтобы указать, что это контроллер SpringMVC!


@Controller
public  class HelloAction  {
    
}

Конечно, теперь Spring не знает, что есть такая аннотация, поэтому нам нужно настроить аннотацию сканирования в файле конфигурации.

**Примечательно:*При настройке пути сканирования не добавляйте .

Иначе я не могу сканировать, я не знаю, когда я изучу Struts2 или другие места, я раньше добавлял .*, так что я давно это делаю!

   <!--扫描注解,后面不要加.*-->


    <context:component-scan base-package="zhongfucheng"/>

Напишите бизнес-методы в контроллерах

@Controller
public class HelloAction {

    /**
     *
     * @RequestMapping 表示只要是/hello.action的请求,就交由该方法处理。当然了.action可以去掉
     * @param model 它和ModelAndView类似,它这个Model就是把数据封装到request对象中,我们就可以获取出来
     * @return 返回跳转的页面【真实路径,就不用配置视图解析器了】
     * @throws Exception
     */
    @RequestMapping(value="/hello.action")

    public String hello(Model model) throws Exception{
        System.out.println("HelloAction::hello()");
        model.addAttribute("message","你好");
        return "/index.jsp";
    }

}


Перейдите на страницу индекса, и домашняя страница получит соответствующее значение.


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  这是我的首页 <br>
  ${message}
  </body>
</html>

这里写图片描述


Конечно,Spring MVC разработан на основе аннотаций и на основе XML с помощью картографов, адаптеров и парсеров представлений. Только мапперы и адаптеры немного отличаются. Но его можно опустить!


    <!-- 基于注解的映射器(可选) -->
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

    <!-- 基于注解的适配器(可选) -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

    <!-- 视图解析器(可选) -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

обновить:Вышеупомянутые адаптеры и преобразователи используются только до версии Spring 3.1, а следующие два обычно используются после версии 3.1.


映射器:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping


适配器:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

Конечно,Вышеупомянутые две конфигурации также могут быть использованы<mvc:annotation-driven>> Конфигурация альтернативных процессоров аннотаций и адаптеров.


RequestMapping

@RequestMapping может управлять путем запроса и методом запроса!

Один контроллер пишет несколько бизнес-методов

До сих пор мы все писали один бизнес-метод для каждого контроллера, что определенно неразумно. В Struts2 действие соответствует нескольким бизнес-методам. Итак, как мы напишем это в SpringMVC? ? ?

На самом деле, мы можем сделать вывод, что@RequestMapping используется для настройки того, какой запрос соответствует какому бизнес-методу!


public @interface RequestMapping {
    String[] value() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};
}

Когда мы запрашиваем hello.action, бизнес-метод обработки — hello()... Когда мы запрашиваем bye.action, бизнес-метод обработки — bye()


@Controller
public class HelloAction {

    /**
     *
     * @RequestMapping 表示只要是/hello.action的请求,就交由该方法处理。当然了.action可以去掉
     * @param model 它和ModelAndView类似,它这个Model就是把数据封装到request对象中,我们就可以获取出来
     * @return 返回跳转的页面【真实路径,就不用配置视图解析器了】
     * @throws Exception
     */
    @RequestMapping(value="/hello.action")
    public String hello(Model model) throws Exception{
        System.out.println("HelloAction::hello()");
        model.addAttribute("message","你好");
        return "/index.jsp";
    }
    @RequestMapping(value = "/bye.action")
    public String bye(Model model) throws Exception {
        model.addAttribute("message","再见");
        return "/index.jsp";
    }
}

这里写图片描述

Разработка подмодуля

Конечно, мы часто используем пространства имен для разработки подмодулей в Struts2, и мы можем сделать то же самое в SpringMVC, и мы используем аннотацию @RequestMapping!

Просто поместите аннотацию @RequestMappingнаписать в класс, который представляет подмодуль.



@Controller
//我们知道,如果是value属性上的注解,我们可以把value省略掉的
@RequestMapping("/zhongfucheng")
public class HelloAction {

    /**
     * @param model 它和ModelAndView类似,它这个Model就是把数据封装到request对象中,我们就可以获取出来
     * @return 返回跳转的页面【真实路径,就不用配置视图解析器了】
     * @throws Exception
     * @RequestMapping 表示只要是/hello.action的请求,就交由该方法处理。当然了.action可以去掉
     */
    @RequestMapping(value = "/hello.action")
    public String hello(Model model) throws Exception {
        System.out.println("HelloAction::hello()");
        model.addAttribute("message", "你好");
        return "/index.jsp";
    }

    @RequestMapping(value = "/bye.action")
    public String bye(Model model) throws Exception {
        model.addAttribute("message", "再见");
        return "/index.jsp";
    }
}

Затем мы хотим, чтобы контроллер HelloAction обрабатывал наш запрос, а адрес доступа был либо:http://localhost:8080/zhongfucheng/hello.action, или любойhttp://localhost:8080/zhongfucheng/bye.action


Ограничьте метод управления бизнесом, разрешите доступ только к запросам GET или POST.

Если мы хотим ограничить метод управления бизнесом, доступ разрешен только запросам GET или POST. Или через @RequestMapping добиться.Просто установите свойство метода!


    @RequestMapping(value = "/bye.action",method = RequestMethod.POST)
    public String bye(Model model) throws Exception {
        model.addAttribute("message", "再见");
        return "/index.jsp";
    }

Когда я устанавливаю запрос бизнес-метода на POST, я хочу получить доступ к бизнес-методу через GET. Это не сработает!

这里写图片描述


Бизнес-методы записывают традиционные веб-параметры

В дополнение к параметру модели наш бизнес-метод также может записывать традиционные параметры сервлета, такие как запрос и ответ, если это необходимо. Это так же полезно....

но,Мы не рекомендуем использовать традиционные веб-параметры из-за связанности


@RequestMapping(method=RequestMethod.POST,value="/register")
	public String registerMethod(HttpServletRequest request,HttpServletResponse response) throws Exception{
		
		//获取用户名和薪水
		String username = request.getParameter("username");
		String salary = request.getParameter("salary");
		System.out.println("用户注册-->" + username + ":" + salary);
		
		//绑定到session域对象中
		request.getSession().setAttribute("username",username);
		request.getSession().setAttribute("salary",salary);
		
		//重定向/jsp/success.jsp页面
		//response.sendRedirect(request.getContextPath()+"/jsp/success.jsp");
		
		//转发/jsp/ok.jsp页面
		request.getRequestDispatcher("/jsp/ok.jsp").forward(request,response);
		
		//转发(提倡)
		return "/jsp/success.jsp";
	}

Небольшая деталь: если наше возвращаемое значение должно вернуть реальный путь, и мы используем переадресацию или перенаправление в программе. . .Затем конкретная позиция прыжка основывается на пути прыжка в нашей программе.!

Бизнес-метод собирает параметры

Параметры, которые мы собираем с веб-стороны в Struts2, предназначены для определения переменной-члена в контроллере.Имя переменной-члена должно соответствовать имени, предоставленному веб-стороной... И, учитывая метод set переменной-члена , Затем перехватчик Struts2 поможет нам автоматически назначить параметры, полученные из веб-стороны, нашим переменным-членам. …

Итак, как собрать параметры в SpringMVC? ? ? ? Для нашего SpringMVC невозможно определить переменные-члены, такие как Struts2, потому что SpringMVC является одноэлементным, а Struts2 — многовариантным. Итак, SpringMVC делает это:

  • Напишите параметры бизнес-методов
  • Имя параметра должно совпадать с именем данных, выводимых веб-терминалом.

получить нормальные параметры

Если это общий параметр, мы можем напрямую написать параметр с тем же именем, что и тот, который был получен из Интернета в методе!


<form action="${pageContext.request.contextPath}/hello.action" method="post">
    <table align="center">
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>编号</td>
            <td><input type="text" name="id"></td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="提交">
            </td>
        </tr>
    </table>

</form>


    @RequestMapping(value = "/hello.action")
    public String hello(Model model, String username, int id) throws Exception {

        System.out.println("用户名是:" + username);
        System.out.println("编号是:" + id);

        model.addAttribute("message", "你好");
        return "/index.jsp";
    }

Эффект:

这里写图片描述


Получить JavaBean

Обрабатываем параметры формы, если форма приносит много данных, используем JavaBean для их инкапсуляции. Затем мы можем сделать то же самое в SpringMVC.

  • Создать Javabeans
  • Свойство javaBean имеет то же имя, что и форма, перенесенная
  • Напишите имя Javabean в бизнес-методе

Создайте JavaBean, атрибут javaBean совпадает с именем, введенным формой


public class User {

    private String id;
    private String username;

    public User() {
    }
    public User(String id, String username) {
        this.id = id;
        this.username = username;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                '}';
    }
}

Напишите Javabean для параметра бизнес-метода


    @RequestMapping(value = "/hello.action")
    public String hello(Model model,User user) throws Exception {

        System.out.println(user);
        model.addAttribute("message", "你好");
        return "/index.jsp";
    }

这里写图片描述


массив коллекции

Сбор массивов аналогичен сбору обычных параметров, понять это можно, прочитав следующий код.


<form action="${pageContext.request.contextPath}/hello.action" method="post">
    <table align="center">
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>爱好</td>
            <td><input type="checkbox" name="hobby" value="1">篮球</td>
            <td><input type="checkbox" name="hobby" value="2">足球</td>
            <td><input type="checkbox" name="hobby" value="3">排球</td>
            <td><input type="checkbox" name="hobby" value="4">羽毛球</td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="提交">
            </td>
        </tr>
    </table>

</form>

Бизнес-метод получает параметры


    @RequestMapping(value = "/hello.action")
    public String hello(Model model,int[] hobby) throws Exception {


        for (int i : hobby) {
            System.out.println("喜欢运动的编号是:" + i);

        }

        model.addAttribute("message", "你好");
        return "/index.jsp";
    }

Эффект:

这里写图片描述

собиратьList<JavaBean>собирать

мыВ бизнес-методах Spring такие параметры, как List, нельзя использовать для получения, SpringMVC дает нам другое решение!

мыИспользуйте JavaBean для инкапсуляции коллекции и предоставления соответствующих методов set и get. Затем, когда мы получаем параметры, мы получаем JavaBean


/**
 * 封装多个Emp的对象 
 * @author AdminTC
 */
public class Bean {
	private List<Emp> empList = new ArrayList<Emp>();
	public Bean(){}
	public List<Emp> getEmpList() {
		return empList;
	}
	public void setEmpList(List<Emp> empList) {
		this.empList = empList;
	}
}

Бизнес-метод получает объект JavaBean


	/**
	 * 批量添加员工
	 */
	@RequestMapping(value="/addAll",method=RequestMethod.POST)
	public String addAll(Model model,Bean bean) throws Exception{
		for(Emp emp:bean.getEmpList()){
			System.out.println(emp.getUsername()+":"+emp.getSalary());
		}
		model.addAttribute("message","批量增加员工成功");
		return "/jsp/ok.jsp";
	}

Напишите empList [таблица ниже] непосредственно на странице JSP.


<form action="${pageContext.request.contextPath}/emp/addAll.action" method="POST">
    	<table border="2" align="center">
    		<caption><h2>批量注册员工</h2></caption>
    		<tr>
    			<td><input type="text" name="empList[0].username" value="哈哈"/></td>
    			<td><input type="text" name="empList[0].salary" value="7000"/></td>
    		</tr>
    		<tr>
    			<td><input type="text" name="empList[1].username" value="呵呵"/></td>
    			<td><input type="text" name="empList[1].salary" value="7500"/></td>
    		</tr>
    		<tr>
    			<td><input type="text" name="empList[2].username" value="班长"/></td>
    			<td><input type="text" name="empList[2].salary" value="8000"/></td>
    		</tr>
    		<tr>
    			<td><input type="text" name="empList[3].username" value="键状哥"/></td>
    			<td><input type="text" name="empList[3].salary" value="8000"/></td>
    		</tr>
    		<tr>
    			<td><input type="text" name="empList[4].username" value="绿同学"/></td>
    			<td><input type="text" name="empList[4].salary" value="9000"/></td>
    		</tr>
    		<tr>
    			<td colspan="2" align="center">
    				<input type="submit" value="批量注册"/>
    			</td>
    		</tr>
    	</table>
    </form>

На самом деле этот метод не кажется таким уж сложным для понимания, мы просто инкапсулируем слой вверх [аналогично получению обычных JavaBeans].


Соберите несколько моделей

Возможно, что на странице JSP у нас есть данные модели User для сбора, и данные модели Emp для сбора.... И атрибуты модели User точно такие же, как атрибуты модели Модель Emp.... Что нам делать в это время? ? ?

мы тоже можемBean абстрагируется вверх по модели User и модели Emp, и у Bean есть объекты Emp и User.

/**
 * 封装User和Admin的对象
 * @author AdminTC
 */
public class Bean {
	private User user;
	private Admin admin;
	public Bean(){}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public Admin getAdmin() {
		return admin;
	}
	public void setAdmin(Admin admin) {
		this.admin = admin;
	}
}


Когда JSP-страница собрана, достаточно указать соответствующий тип.


	<form action="${pageContext.request.contextPath}/person/register.action" method="POST">
		<table border="2" align="center">
			<tr>
				<th>姓名</th>
				<td><input type="text" name="user.username" value="${user.username}"/></td>
			</tr>
			<tr>
				<th>月薪</th>
				<td><input type="text" name="user.salary" value="${user.salary}"></td>
			</tr>
			<tr>
				<th>入职时间</th>
				<td><input 
						type="text" 
						name="user.hiredate" 
						value='<fmt:formatDate value="${user.hiredate}" type="date" dateStyle="default"/>'/></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="普通用户注册" style="width:111px"/>
				</td>
			</tr>
		</table>	
	</form>	

Тип строки на дату

В Struts2, если тип строки, переданный из веб-терминала, — гггг-мм-дд чч:мм:сс, Struts2 может автоматически преобразовать ее в дату по умолчанию.Если это другой тип строки, Struts2 не разрешается автоматически. Либо используйте собственный конвертер для анализа, либо используйте программу Java для самостоятельного анализа....

В SpringMVC даже тип yyyy-mm-dd hh:MM:ss SpringMVC не может автоматически разрешить его для нас. Давайте посмотрим на следующий пример:

JSP передает строку о формате даты в контроллер...

<form action="${pageContext.request.contextPath}/hello.action" method="post">
    <table align="center">
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>出生日期</td>
            <td><input type="text" name="date" value="1996-05-24"></td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="提交">
            </td>
        </tr>
    </table>

</form>

Пользовательский объект определяет переменную-член Date для получения


 public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }

Бизнес-метод для получения значения даты


    @RequestMapping(value = "/hello.action")
    public String hello(Model model, User user) throws Exception {

        System.out.println(user.getUsername() + "的出生日期是:" + user.getDate());


        model.addAttribute("message", "你好");
        return "/index.jsp";
    }

Оказывается, что-то пошло не так, SpringMVC не поддерживает такой тип параметра:

这里写图片描述


Теперь проблема брошена, так как же мы ее решим? ? ? ?

SpringMVC дает нам метод, аналогичный преобразователю типов Struts2, который мы можем использовать:Если мы используем унаследованный класс AbstractCommandController для разработки, мы можем переопределить метод initBinder().....

Конкретная реализация выглядит следующим образом:


    @Override
    protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
        binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
    }

Затем мы теперь используем аннотации для разработки, и нет переопределяющего метода. поэтому мыЧто нужно использовать, так это аннотацию, указывающую, что я хочу переопределить метод!


    @InitBinder
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
        binder.registerCustomEditor(
                Date.class,
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
        
    }

Посетите снова:

这里写图片描述

Стоит отметить, что:Если мы используем время вставки Oracle, нам нужно написать временную метку TimeStrap в операторе SQL, чтобы вставить его, иначе это не сработает.!


Перенаправление и переадресация результатов

Когда мы обычно занимаемся разработкой, мы часто возвращаемся к списку отображения после редактирования данных. Мы используем файлы конфигурации для перенаправления или переадресации в Struts2:

这里写图片描述

И наш SpringMVC очень прост, просто напишите ключевое слово перед прыжком!



    public String hello(Model model, User user) throws Exception {

        System.out.println(user.getUsername() + "的出生日期是:" + user.getDate());
        model.addAttribute("message", user.getDate());
        return "redirect:/index.jsp";
    }

这里写图片描述

И так далее, если мы хотим запросить снова, то нам нужно просто написать соответствующий путь запроса!


    @RequestMapping(value = "/hello.action")
    public String hello(Model model, User user) throws Exception {

        return "redirect:/bye.action";
    }

    @RequestMapping("/bye.action")
    public String bye() throws Exception {

        System.out.println("我进来了bye方法");
        return "/index.jsp";
    }

这里写图片描述


Вернуть текст JSON

Вспомните, как Struts2 возвращает текст JSON:

  • импортный пакет jar
  • Объект для возврата текста JSON предоставляет метод get
  • Наследовать пакет json-default в файле конфигурации
  • Тип возвращаемого значения тега результата — json.

Итак, как мы работаем в SpringMVC? ? ?

Импорт двух пакетов разработки JSON

  • jackson-core-asl-1.9.11.jar
  • jackson-mapper-asl-1.9.11.jar

Аннотируйте бизнес-метод, который возвращает JSON:


    @RequestMapping(value = "/hello.action")
    public
    @ResponseBody
    User hello() throws Exception {

        User user = new User("1", "zhongfucheng");
        return user;
    }

Настройте JSON-адаптер


	
		<!--  
			1)导入jackson-core-asl-1.9.11.jar和jackson-mapper-asl-1.9.11.jar
			2)在业务方法的返回值和权限之间使用@ResponseBody注解表示返回值对象需要转成JSON文本
			3)在spring.xml配置文件中编写如下代码:
				-->
			<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
				<property name="messageConverters">
						<list>
							<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
						</list>
				</property>
		    </bean>
	

Тест JSP


	<input type="button" value="Emp转JSON"/><p>

    <input type="button" value="List<Emp>转JSON"/><p>

    <input type="button" value="Map<String,Object>转JSON"/><p>

    <!-- Map<String,Object>转JSON -->
    <script type="text/javascript">
        $(":button:first").click(function(){
            var url = "${pageContext.request.contextPath}/hello.action";
            var sendData = null;
            $.post(url,sendData,function(backData,textStaut,ajax){
                alert(ajax.responseText);
            });
        });
    </script>

контрольная работа:

这里写图片描述

Тест карты:


    @RequestMapping(value = "/hello.action")
    public
    @ResponseBody
    Map hello() throws Exception {

        Map map = new HashMap();

        User user = new User("1", "zhongfucheng");
        User user2 = new User("12", "zhongfucheng2");
        map.put("total", user);
        map.put("rows", user2);


        return map;
    }

这里写图片描述

обновить---------------------------------------------------------------- ------------------

еслиЕсли переданные данные имеют формат JSON, нам нужно использовать другую аннотацию.@RequestBody, Преобразуйте запрошенные данные json в объект java

这里写图片描述

这里写图片描述


Суммировать

  • Разработка с использованием аннотаций позволяет избежать наследования избыточных классов и является очень лаконичной и эффективной.
  • Если вы хотите, чтобы китайцы были искажены, недостаточно просто установить формат кодировки запроса. Поскольку SpringMVC инкапсулирует данные через конструктор без параметров. Мы можем использовать фильтры, предоставляемые SpringMVC, для решения проблемы искажения китайских символов.
  • RequestMapping может установить наш конкретный путь доступа, а также может быть разработан в модулях. По этим двум причинам мы можем написать несколько бизнес-методов в одном действии.
  • RequestMapping также может ограничивать метод запроса GET или POST.
  • В наших бизнес-методах мы также можем использовать традиционные объекты, такие как запрос и ответ., но если вам не нужно его использовать, лучше его не использовать.
  • Чтобы SpringMVC помог нам инкапсулировать параметры, также необходимо использовать то же имя, которое было получено в запросе. Если это не то же самое, нам нужно использовать аннотации, чтобы решить эту проблему.
  • Если необходимо инкапсулировать в коллекцию или инкапсулировать несколько bean-компонентов, то мыJavaBean в фоновом режиме должен быть инкапсулирован в верхний уровень, а Bean написан на основе бизнес-метода. Конечно, свойства, соответствующие свойствам Bean, должны быть указаны на веб-странице..
  • Используется объект String to dateАннотация @InitBinder для переопределения методов.
  • Чтобы вернуть объект JSON, нам нужно использовать аннотацию @ResponseBody.Если полученные данные JSON инкапсулированы в JavaBean, нам нужно использовать аннотацию @RequestBody. Затем создайте соответствующий bean-компонент в файле конфигурации.

Если в статье есть какие-либо ошибки, пожалуйста, поправьте меня, и мы сможем общаться друг с другом.Учащиеся, которые привыкли читать технические статьи в WeChat и хотят получить больше ресурсов по Java, могут подписаться на общедоступную учетную запись WeChat: Java3y.