1.返回的参数json转xml
1.导入包
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.6</version>
</dependency>
2.请求时加上请求头 Accept application/xml即可
如果要返回json,去掉头信息,或者请求头改为Accept application/json
3.原理
略
4.修改默认的返回格式
2.自定义返回类型
1.数据对象
public class Person {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.处理类
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.Properties;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import com.nn.bean.Person;
public class PropertiesPeopleHttpMessageConverter extends
AbstractHttpMessageConverter<Person>{
public PropertiesPeopleHttpMessageConverter() {
super(MediaType.valueOf("application/properties+person"));
setDefaultCharset(Charset.forName("UTF-8"));
}
@Override
protected boolean supports(Class<?> clazz) {
return clazz.isAssignableFrom(Person.class);
}
/* 将请求内容中Properties内容转化为Person对象
* (non-Javadoc)
* @see org.springframework.http.converter.AbstractHttpMessageConverter#readInternal(java.lang.Class, org.springframework.http.HttpInputMessage)
*/
@Override
protected Person readInternal(Class<? extends Person> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {
/*person.id=1
person.name=小马哥
*/
InputStream inputStream=inputMessage.getBody();
Properties properties=new Properties();
// 将请求内容转化到Properties
properties.load(new InputStreamReader(inputStream, getDefaultCharset()));
// 将Properties内容转化到Person对象字段中
Person person=new Person();
person.setId(properties.getProperty("person.id"));
person.setName(properties.getProperty("person.name"));
return person;
}
@Override
protected void writeInternal(Person person, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
OutputStream outputStream = outputMessage.getBody();
Properties properties=new Properties();
properties.setProperty("person.id", person.getId());
properties.setProperty("person.name", person.getName());
properties.store(new OutputStreamWriter(outputStream,getDefaultCharset()), "Written by web server");
}
}
3.加入自定义的消息转换器
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.nn.filter.LoginFilter;
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer{
@Autowired
private LoginFilter loginFilter;
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new PropertiesPeopleHttpMessageConverter());
}
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(loginFilter).addPathPatterns("/**").excludePathPatterns("/login","/");
// }
}
4.controller
/**json转properties
* @param person
* @return
*/
@PostMapping(value="/person/json/to/properties",
produces="application/properties+person" //响应类型
)
@ResponseBody
public Person personJsonToProperties(@RequestBody Person person) {
return person;
}
/**properties转json
* @param person
* @return
*/
@PostMapping(value="/person/properties/to/json",
consumes="application/properties+person", //请求类型
produces=MediaType.APPLICATION_JSON_UTF8_VALUE //响应类型
)
@ResponseBody
public Person propertiesJsonToPerson(@RequestBody Person person) {
return person;
}
5.请求示例