MVC設定(9):WebMvcConfigure-HSTPメッセージ変換器+JSON,XML
12.HTTPメッセージ変換器
HTTPメッセージ変換器
@RestController
public class SampleController {
@GetMapping("/message")
public @ResponseBody String message(@RequestBody String body){
return body;
}
}
テストの作成@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void stringmessage() throws Exception{
this.mockMvc.perform(get("/message")
.content("hello"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string("hello"));
}
}
デフォルトHTTPメッセージ変換器ConfigureConverterという名前の方法でWebMcConfigureにメッセージ変換器を追加することもできますが、この方法でメッセージ変換器を追加すると、デフォルトの変換器は使用できません.したがって、追加したい場合はextendMessageConvertsというメソッドを使用できます.
設定方法
デフォルトで登録されているコンバータに新しいコンバータを追加:extendMessageConverter デフォルトで登録されているすべてのコンバータを無視して、新しいコンバータを設定します.メッセージコンバータを構成します.
-依存性をmavenまたはグラデーション設定に追加すると、対応するコンバータが自動的に登録されます.
-(この機能自体はSpring BootではなくSpringフレームワークの機能です.)
13.HTTPメッセージ変換器JSON
スプリングガイドを無効にする場合(W e b M v c C o n f igrationSupport)
使用したいJSONライブラリを依存項目として追加
ドメインクラス
@Entity
public class Person {
@Id @GeneratedValue
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
コントローラクラス@RestController
public class SampleController {
@GetMapping("/jsonMessage")
public Person jsonMessage(@RequestBody Person person){
return person;
}
}
テストコード@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Autowired
PersonRepository personRepository;
@Autowired
ObjectMapper objectMapper;
@Test
public void jsonMessage() throws Exception {
Person person = new Person();
person.setId(2019l);
person.setName("spring");
String jsonString = objectMapper.writeValueAsString(person);
this.mockMvc.perform(get("/jsonMessage")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(jsonString)
.accept(MediaType.APPLICATION_JSON_UTF8))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").value(2019))
.andExpect(jsonPath("$.name").value("spring"));
}
}
JSONパスは、json応答の本文を表示するときに使用できます.あるいはpostmanというクライアント起動サーバでテストすることもできます.
14.HTTPメッセージ変換器XML
オブジェクトXML Mapper(OXM)ライブラリにスプリングサポートの依存項目を追加
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring-framework.version}</version>
</dependency>
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public Jaxb2Marshaller jaxb2Marshaller(){
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setPackagesToScan(Person.class.getPackageName());
// Person.class가 있는 패키지 이름을 scan해서
// @XmlRootElement 애노테이션이 있는지 확인
return jaxb2Marshaller;
}
}
@XmlRootElement
@Entity
public class Person {
@Id @GeneratedValue
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Autowired
PersonRepository personRepository;
@Autowired
Marshaller marshaller;
@Test
public void xmlMessage() throws Exception {
Person person = new Person();
person.setId(2019l);
person.setName("spring");
StringWriter stringWriter = new StringWriter();
Result result = new StreamResult(stringWriter);
marshaller.marshal(person, result);
String xmlString = stringWriter.toString();
this.mockMvc.perform(get("/jsonMessage")
.contentType(MediaType.APPLICATION_XML)
.content(xmlString)
.accept(MediaType.APPLICATION_XML))
.andDo(print())
.andExpect(status().isOk())
.andExpect(xpath("person/name").string("seonju"))
.andExpect(xpath("person/id").string("2019"));
}
}
xml応答の本文を表示する場合は、Xpathを使用します.同様にpostmanというクライアント起動サーバでテストすることもできます.
リファレンス
Reference
この問題について(MVC設定(9):WebMvcConfigure-HSTPメッセージ変換器+JSON,XML), 我々は、より多くの情報をここで見つけました https://velog.io/@jsj3282/스프링-MVC-설정9-WebMvcConfigure-HTTP-메시지-컨버터-JSON-XMLテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol