2、需求:
1)、浏览器发请求返回xml [application/xml] jacksonXmlConverter
2)、如果是ajax请求返回json [application/json] jackJsonConverter
3)、如果app硅谷发请求,返回自定义协议数据 [application/x-guigu] xxxConverter
需求:自定义内容协商:“application/x-guigu”。数据写出的格式为:数据属性间以分号“;”隔开。
第一步:创建Bean类Person。
package com.wzy.springbootweb01.bean;@Data//提供Getter、Setter方法。public class Person {private String userName;private Integer age;}
第二步:创建自定义GuiguMessageConverter,实现接口HttpMessageConverter<Person>。<Person>为数据源类型。
package com.wzy.springbootweb01.converter;/*自定义converter*/public class GuiguMessageConverter implements HttpMessageConverter<Person> {//可不可以,把aClass类型的数据,读成mediaType。@Overridepublic boolean canRead(Class<?> aClass, MediaType mediaType) {return false;}//可不可以,把aClass类型的数据,写成 mediaType。@Overridepublic boolean canWrite(Class<?> aClass, MediaType mediaType) {//return true;return aClass.isAssignableFrom(Person.class);//设置为:只要是Person类型的就能读写。}//获取所有媒体支持类型。//服务器统计所有MessageConverter 都能写出哪些内容类型。@Overridepublic List<MediaType> getSupportedMediaTypes() {return MediaType.parseMediaTypes("application/x-guigu");//自定义类型接收格式}@Overridepublic Person read(Class<? extends Person> aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {return null;}//自定义内容协商格式(数据写出的格式,数据属性以分号“;”隔开)。@Overridepublic void write(Person person, MediaType mediaType, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {//把属性值之间以分号“;”隔开。String data = person.getUserName() + ";" + person.getAge();//写出去OutputStream body = httpOutputMessage.getBody();body.write(data.getBytes(StandardCharsets.UTF_8));}}
第三步:在配置文件类 MyConfig 中,配置自定义协议类。
package com.wzy.springbootweb01.boot;@Configuration/*(proxyBeanMethods = false)*/public class MyConfig {@Beanpublic WebMvcConfigurer webMvcConfigurer(){//增强功能return new WebMvcConfigurer() {@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new GuiguMessageConverter());}}
第四步:创建Controller测试类。
package com.wzy.springbootweb01.controller;@Controller//创建处理器对象,并把处理器对象中,处理器方法处理的结果输出到浏览器。public class MyConyroller11Json {@ResponseBody@RequestMapping(value = "getJson",method = RequestMethod.GET)public Person getJson(){Person person = new Person();person.setUserName("张三");person.setAge(25);return person;}}
第五步:测试。数据是以分号“;”隔开的
