2、需求:
    1)、浏览器发请求返回xml [application/xml] jacksonXmlConverter
    2)、如果是ajax请求返回json [application/json] jackJsonConverter
    3)、如果app硅谷发请求,返回自定义协议数据 [application/x-guigu] xxxConverter

    需求:自定义内容协商:“application/x-guigu”。数据写出的格式为:数据属性间以分号“;”隔开。

    第一步:创建Bean类Person。

    1. package com.wzy.springbootweb01.bean;
    2. @Data//提供Getter、Setter方法。
    3. public class Person {
    4. private String userName;
    5. private Integer age;
    6. }

    第二步:创建自定义GuiguMessageConverter,实现接口HttpMessageConverter<Person><Person>为数据源类型。
    image.png

    1. package com.wzy.springbootweb01.converter;
    2. /*自定义converter*/
    3. public class GuiguMessageConverter implements HttpMessageConverter<Person> {
    4. //可不可以,把aClass类型的数据,读成mediaType。
    5. @Override
    6. public boolean canRead(Class<?> aClass, MediaType mediaType) {
    7. return false;
    8. }
    9. //可不可以,把aClass类型的数据,写成 mediaType。
    10. @Override
    11. public boolean canWrite(Class<?> aClass, MediaType mediaType) {
    12. //return true;
    13. return aClass.isAssignableFrom(Person.class);//设置为:只要是Person类型的就能读写。
    14. }
    15. //获取所有媒体支持类型。
    16. //服务器统计所有MessageConverter 都能写出哪些内容类型。
    17. @Override
    18. public List<MediaType> getSupportedMediaTypes() {
    19. return MediaType.parseMediaTypes("application/x-guigu");//自定义类型接收格式
    20. }
    21. @Override
    22. public Person read(Class<? extends Person> aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {
    23. return null;
    24. }
    25. //自定义内容协商格式(数据写出的格式,数据属性以分号“;”隔开)。
    26. @Override
    27. public void write(Person person, MediaType mediaType, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {
    28. //把属性值之间以分号“;”隔开。
    29. String data = person.getUserName() + ";" + person.getAge();
    30. //写出去
    31. OutputStream body = httpOutputMessage.getBody();
    32. body.write(data.getBytes(StandardCharsets.UTF_8));
    33. }
    34. }

    第三步:在配置文件类 MyConfig 中,配置自定义协议类。
    image.png

    1. package com.wzy.springbootweb01.boot;
    2. @Configuration/*(proxyBeanMethods = false)*/
    3. public class MyConfig {
    4. @Bean
    5. public WebMvcConfigurer webMvcConfigurer(){//增强功能
    6. return new WebMvcConfigurer() {
    7. @Override
    8. public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    9. converters.add(new GuiguMessageConverter());
    10. }
    11. }

    第四步:创建Controller测试类。

    1. package com.wzy.springbootweb01.controller;
    2. @Controller//创建处理器对象,并把处理器对象中,处理器方法处理的结果输出到浏览器。
    3. public class MyConyroller11Json {
    4. @ResponseBody
    5. @RequestMapping(value = "getJson",method = RequestMethod.GET)
    6. public Person getJson(){
    7. Person person = new Person();
    8. person.setUserName("张三");
    9. person.setAge(25);
    10. return person;
    11. }
    12. }

    第五步:测试。数据是以分号“;”隔开的
    image.png