[SpringMVC] Respuesta-Saltar / modificar página de vista + pares clave-valor en el campo de operación

1. Respuesta


 

1 Método de respuesta de datos

1) Salto de página: volver directamente a la cadena / volver al objeto ModelAndView

2) Reescribir los datos: regresar directamente a la cadena / regresar al objeto o colección

 

2.1 Salto de página-regreso a la cadena directamente

La returncadena directa se empalmará con el prefijo y el sufijo del analizador de vista configurado en spring-mvc.xml.

@RequestMapping("/test0")
public String test0() {
    
    
    return "hello.jsp";
}

 

2.2 Página Jump-Return al objeto ModelAndView

-------------------------------------------------------------------------------------------

形式1: 在方法内部`new`出一个ModelAndView对象,并设置其模型和视图
形式2: 方法的参数直接写ModelAndView,SpringMVC就会自动帮我们创建这个对象,我们在方法内部就可以直接使用
形式3: 方法的参数直接写HttpServletRequest,我们之前学习Web时就是利用该对象向request域设置数据的(不推荐这种原生方法)

-------------------------------------------------------------------------------------------

@RequestMapping("/test1")
public ModelAndView test1() {
    
    
    ModelAndView modelAndView = new ModelAndView();
    // 设置模型
    modelAndView.addObject("username", "Alice");
    // 设置视图
    modelAndView.setViewName("hello.jsp");
    return modelAndView;
}


@RequestMapping("/test2")
public ModelAndView test2(ModelAndView modelAndView) {
    
    
    // 设置模型
    modelAndView.addObject("username", "Alice");
    // 设置视图
    modelAndView.setViewName("hello.jsp");
    return modelAndView;
}

@RequestMapping("/test2")
public String test2(Model model) {
    
    
	// 这种写法不难理解
    model.addAttribute("username", "Alice");
    return "hello.jsp";
}


@RequestMapping("/test3")
public String test3(HttpServletRequest request) {
    
    
	// 之前学习Web时就是利用该对象向request域设置数据的(原生写法,并未使用框架)
    request.setAttribute("username", "Alice");
    return "hello.jsp";
}

 
 

3.1 Escribir datos: devolver una cadena directamente

Al aprender a utilizar la Web, la forma de volver a escribir datos es response.getWriter().print(“hello world”). En el marco SpringMVC, también podemos (pero no se recomienda) usar esta forma de usar objetos de solicitud / respuesta nativos:

@RequestMapping("/test4")
public void test4(HttpServletResponse response) throws IOException {
    
    
    response.getWriter().print("萝莉suki");
}

Incluso podemos dirigir la returncadena, solo use la anotación @ResponseBody para decirle al marco que no confunda el salto de vista directamente : return

@RequestMapping("/test5")
@ResponseBody
public String test5() {
    
    
    return "萝莉suki";
}

 

3.2 Escriba la cadena de formato json de retorno directo de datos

En escenarios de desarrollo reales, todo lo que devolvemos son cadenas json. El uso de jackson puede convertir directamente objetos en cadenas json, lo cual es extremadamente conveniente.

@RequestMapping("/test6")
@ResponseBody
public String  test6() throws IOException {
    
    
    User user = new User("Alice", 12);
    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(user);
    return json;
}

 

3.3 Reescribir objeto o colección de retorno de datos

Esta operación de "convertir un objeto en una cadena json" es extremadamente frecuente y parece problemático usar siempre el método anterior. Afortunadamente, el marco SpringMVC puede lograr automáticamente esta conversión, y solo necesitamos realizar una configuración simple (spring-mvc.xml).

Además, ¡no olvides escribir las anotaciones de @ResponseBody !

<!-- 配置处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
        </list>
    </property>
</bean>
@RequestMapping("/test7")
@ResponseBody
public User test7() throws IOException {
    
    
	// 直接返回对象/集合即可,框架帮我们做好了一切
    User user = new User("Alice", 12);
    return user;
}

Incluso puede ser más sencillo.

<mvc:annotation-driven />Puede cargar RequestMappingHandlerMapping automáticamente (mapeador de procesador) y

RequestMappingHandlerAdapter (adaptador de procesador), y su capa inferior predeterminada ha integrado la conversión automática de Jackson.

En otras palabras, la configuración extremadamente complicada anterior se convierte en la siguiente oración:

<!-- 配置mvc注解驱动(自动加载处理器映射器+处理器适配器) -->
<mvc:annotation-driven />

 
 

4. Explicación de confusión

① ¿No es el "Modelo" en el "retorno al objeto ModelAndView" en el recuento de saltos de página como escritura de datos?

  Estas son dos cosas diferentes. El "Modelo" devuelto es, de hecho, datos, pero estos datos se escriben en el campo Solicitud , y "datos de reescritura " se refiere a escribir algunos datos directamente en la página mostrada a través de Responce .

② A veces no puedo entenderlo u olvido escribir la anotación @ResponseBody . ¿Cómo puedo juzgar si escribirlo o no?

  Es muy simple. Con respecto al "salto de página", la esencia es usar el objeto Request, por lo que la anotación no está escrita, con respecto a "escribir datos", la esencia es usar el objeto Responce, por lo que la anotación debe estar escrita. En otras palabras, el significado de agregar la anotación @ResponseBody es decirle al marco SpringMVC que no salte .

③ ¿Se pueden entender los datos de reescritura en respuesta como "tanto la cadena de caracteres como el objeto / colección pueden reescribirse"?

  Lo que se escribe de nuevo es en realidad "cadena normal y cadena json".

④ ¿Todavía no puedo distinguir entre los datos de salto de página y los datos de reescritura?

El salto de página es saltar a otra página que muestra información nueva. Escribir datos es solo una modificación parcial de la información mostrada en la página original; en cuanto a los pares clave-valor en el campo de operación, es otra cuestión.

Inserte la descripción de la imagen aquí

 
 
 
 

 
 
 
 

 
 
 
 

Más> _ <

Supongo que te gusta

Origin blog.csdn.net/m0_46202073/article/details/114304113
Recomendado
Clasificación