• 后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节20(核心对象,视图解析器,JSON)


    1、概念

      当返回值为JSON时,根据Handler方法的返回值分为以下两种情形:

    1. 当返回值为字符串类型时,它可以直接是JSON字符串。
    2. 当返回值为实体对象时,通过配置将实体对象转换为字符串。

    2、使用

      根据返回值的类型,它的实现方式有三种。

    1. 当返回值为JSON字符串时,添加@ResponseBody注解,设置produces属性
    2. 当返回值为实体对象时,添加@JsonView注解。
    3. 当返回值为实体对象时,配置相关配置项。

    2.1    json字符串

      当返回值为JSON字符串时,它的使用步骤如下:

    1. 第一步,在handler方法上添加@Responsebody注解,或者在Controller类上添加@RestController注解
    2. 第二步,在@XXMapping方法上设置produces属性的值为Application json相关的值即可。或者在Controller类上添加@XXMapping注解,并设置produces的值。

    2.2    jsonView

      当返回值为实体对象时,它的使用步骤如下:

    1. 第一步,创建返回的实体对象,现在通常情况下都是ResponseEntity<T>,组成部分有三个code,message,data。
    2. 第二步,在实体对象的属性上添加@JsonView注解。
    3. 第三步,在handler方法上添加@JsonView,@ResponseBody注解。

    2.3     配置

      当返回值为实体对象时,它的使用步骤如下:

    1. 第一步,配置响应内容类型,调用configureContentNegotiation。
    2. 第二步,配置HttpMessageConverter。
    3. 第三步,验证,返回任意的实体对象。

    3、示例

      在实际项目中经常使用json字符串,示例省略。

    3.1    JsonView示例

      1、第一步,创建ResponseEntity<T>对象。在属性上添加@JsonView注解

    @Getter
    @Setter
    public class ResponseEntity<T extends Bean> {
    	public interface ResponseData {};
    	// 返回码
    	@JsonView(ResponseData.class)
    	private Integer code;
    	// 返回信息
    	@JsonView(ResponseData.class)
    	private String message;
    	// 返回实体对象
    	@JsonView(ResponseData.class)
    	private T  data;
    }
    

      2、第二步,在Handler方法上添加@JsonView注解

    @GetMapping("/jsonView")
    @ResponseBody
    @JsonView(ResponseData.class)
    public ResponseEntity<User> getUser(@ModelAttribute User user) {
    	ResponseEntity<User> responseData = new ResponseEntity<User>();
    	responseData.setCode(200);
    	responseData.setMessage("some message");
    	responseData.setData(user);
    	return responseData;
    }
    

      3、第三步,在User实体对象上,需要返回的属性上添加@JsonView注解

    @Getter
    @Setter
    public class User extends Bean{
    	// 姓名
    	@JsonView(ResponseData.class)
    	private String name;
    	// 年龄
    	@JsonView(ResponseData.class)
    	private int age;
    }
    

      4、第四步,验证,访问jsonView,结果如下:

    {"code":200,"message":"somemessage","data":{"name":"Jack","age":10}}
    

    3.2     配置

      1、第一步,配置内容响应类型,当请求中携带.json后缀时,响应内容就会设置为Application_json

    @Override
    public void 
    configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    	// 是否支持url中的后缀做为判断依据,false时会禁用
    	configurer.favorPathExtension(true)
    	// 请求Url参数的名称,或者是请求头中的参数名称
    	.parameterName("mediatype")
    	// 是否忽略请求头信息,true会忽略,此时相当于禁用根据请求头信息判断内容类型
    	.ignoreAcceptHeader(false)
    	.useJaf(false)
    	// 设置默认的响应类型,此时设置为Application_json
    	.defaultContentType(MediaType.APPLICATION_JSON_UTF8)
    	// 建立参数值或者是后缀值与响应类型MediaType之间的关系,例如请求url后缀为xx.json,此时根据json,响应类型为Application_JSON
    	.mediaType("json", MediaType.APPLICATION_JSON)
    	// xml表示Application_xml
    	.mediaType("xml", MediaType.APPLICATION_XML);
    }

      2、第二步,配置HttpMessageConverter

    /**
     * 
     * 配置messageConverter
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    	// 创建ObjectMapperBuilder对象
    	Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder().indentOutput(true)
    			  .dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
    	// 将对象转换为JSON
    	converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
    }

      3、第三步,验证。访问jsonView.json,结果如下:

    {
      "code" : 200,
      "message" : "some message",
      "data" : {
        "name" : "Jack",
        "age" : 10
      }
    }
    

      这种方式个人感觉最优。

  • 相关阅读:
    Android之Handler
    错误一览表
    Android ImageView 的scaletype属性详细介绍 转
    Adobe Flash/Dreamweaver/Fireworks CS3 软件不能安装问题
    MySQL修改表属性的SQL语句
    Apache与Tomcat整合
    mySQL常用SQL语句技法
    今天第一次写博客
    Tomcat+JSP经典配置实例
    整合Apache+Tomcat服务器2
  • 原文地址:https://www.cnblogs.com/rain144576/p/12903012.html
Copyright © 2020-2023  润新知