일단 message converter 를 사용해야 되니 인터페이스를 정의해보자.
Copy public interface HttpMessageConverter < T > {
boolean canRead ( Class < ? > clazz , @ Nullable MediaType mediaType);
boolean canWrite ( Class < ? > clazz , @ Nullable MediaType mediaType);
List < MediaType > getSupportedMediaTypes ();
T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;
void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
}
이미 다들 알고 있었지만 Http 요청의 content-Type은 다양하다. xml로 전화하려면 해당 converter 를 사용해야 된다. SpringMVC는 기본적으로 Jackson 으로 구현 된 MappingJackson2XmlHttpMessageConverter 객체를 제공한다.
Spring (springboot아님) 에서는 아래와 같이 했었다.
Copy @ Configuration
public class MessageConverterConfig1 extends WebMvcConfigurerAdapter {
@ Override
public void configureMessageConverters ( List < HttpMessageConverter < ? >> converters) {
Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder . xml ();
builder . indentOutput ( true );
converters . add ( new MappingJackson2XmlHttpMessageConverter( builder . build()) );
}
}
그럼 Springboot 에서는 조금 더 쉽게 할수 있지 않을까 ? 맞다 바로 아래와 같이.
pom.xml dependency 추가 하면 자동으로 MappingJackson2XmlHttpMessageConverter 를 사용할수 있게 된다.
Copy < dependency >
< groupId >com.fasterxml.jackson.dataformat</ groupId >
< artifactId >jackson-dataformat-xml</ artifactId >
</ dependency >
Copy @ Data
@ NoArgsConstructor
@ AllArgsConstructor
@ JacksonXmlRootElement (localName = "User" )
public class User {
@ JacksonXmlProperty (localName = "name" )
private String name;
@ JacksonXmlProperty (localName = "age" )
private Integer age;
}
Copy < User >
< name >aaaa</ name >
< age >10</ age >
</ User >
xml요청을 받는 controller 를 만든다.
Copy @ Controller
public class UserController {
@ PostMapping (value = "/user" ,
consumes = MediaType . APPLICATION_XML_VALUE ,
produces = MediaType . APPLICATION_XML_VALUE )
@ ResponseBody
public User create (@ RequestBody User user) {
user . setName ( "didispace.com : " + user . getName ());
user . setAge ( user . getAge () + 100 );
return user;
}
}
POSTMAN 으로 xml 요청을 해보자.