springboot accep定义 (接受+返回) 的参数类型

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.请求示例

猜你喜欢

转载自blog.csdn.net/q975583865/article/details/83315275
今日推荐