편안하고 아키텍처는 "자원"(자원)의 핵심 개념이다. 편안하고 네트워크 자원의 관점 아무것도이다에서, 그 텍스트의 일부가 될 수 있고, 사진, 등등 노래 서비스는, 각각의 자원은 특정 URI (유니폼 리소스 로케이터)에 대응 및 자원을 얻을 수있는이 URI에 방문을 표시하는 데 사용합니다.
인터넷, 클라이언트와 온라인 과정을 전달 서버 간의 자원의 상호 작용의 단지 표현, 자원 URI를 호출하는 프로세스의 다른 발현을 가져옵니다. 이러한 상호 작용은, 클라이언트가 GET (인수), POST는 (작성), PUT (갱신)을 포함, 몇 가지 기본적인 HTTP 작업을 사용할 수있는 서버 상태를 모두 저장해야합니다, 즉, 비 저장 HTTP 프로토콜을 사용할 수 있으며 서버의 자원 "상태 변환"(상태 전송)이 일어날 수 있도록 (삭제) 삭제라고도 "인 Representational 상태 전송."
편안한위한 봄 부팅 지원
다른 노트를 통해 프론트 엔드의 지원 요청에 편안하고 개발 프로그램을위한 봄 부팅 전체 지원은 주석의 일반 사용 외에, 봄 부팅 또한 노트의 조합을 언급. 이 주석은 매핑 방법을 일반적으로 HTTP를 단순화하고, 더 나은 방법은 의미 적 표현을 주석.
- @GetMapping, 요청 처리를 받기
- @PostMapping, 후 처리 요청
- 리소스를 업데이트하는 데 사용 @PutMapping
- @DeleteMapping, 요청을 삭제 처리
- 사용 @PatchMapping은 자원의 일부를 업데이트
시험 종류 :
패키지 com.example; 수입 org.junit.Before; 수입 org.junit.Test; 수입 org.junit.runner.RunWith; 수입 org.springframework.beans.factory.annotation.Autowired; 수입 org.springframework.boot.test.context.SpringBootTest; 수입 org.springframework.test.context.junit4.SpringRunner; 수입 org.springframework.test.web.servlet.MockMvc; 수입 org.springframework.test.web.servlet.MvcResult; 수입 org.springframework.test.web.servlet.request.MockMvcRequestBuilders; 수입 org.springframework.test.web.servlet.setup.MockMvcBuilders; 수입org.springframework.util.LinkedMultiValueMap; 수입 org.springframework.util.MultiValueMap; 수입 org.springframework.web.context.WebApplicationContext; @RunWith (SpringRunner. 클래스 ) @SpringBootTest 공공 클래스 MessageControllerTest { @Autowired 개인 의 WebApplicationContext의 WAC; 개인 MockMvc mockMvc; @Before 공개 무효 설정 () { 이 .mockMvc = MockMvcBuilders.webAppContextSetup ( 이 .wac) .build (); saveMessages (); // 初始化数据 } //모든 초기화 데이터 요청받을 받기 @Test 공공 무효 GetAllMessages ()를 던져 예외 { 문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.get ( "/ 메시지" )) andReturn ()하는 GetResponse () getContentAsString (); ... System.out에. println 메소드 ( "결과 ==="+ mvcResult는); } // 하나의 GET 요청 메시지를 얻을 @Test 공공 무효 의 getMessage () 던져 예외 { 문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.get ( "/ 메시지 / 6." )). . andReturn ()하는 GetResponse () getContentAsString (); 에서 System.out.println ( "=== 결과"+mvcResult); } // .更新ID为6的消息体测试修改(넣어请求) @Test 공개 공극 modifyMessage () 가 발생 예외 { 최종 MultiValueMap <문자열, 문자열> = PARAMS 새로운 LinkedMultiValueMap <> (); params.add ( "ID", "6" ); params.add ( "텍스트"를 "텍스트" ); params.add ( "요약", "요약" ); 문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.put는 ( "/ 메시지" ) (PARAMS) .params) .andReturn ().하는 GetResponse (). 에서 System.out.println ( "결과 ==="+ mvcResult); } // 测试局部修改(패치请求) @Test 공개 공극 patchMessage () 가 발생 예외 { 최종 MultiValueMap <문자열, 문자열> = PARAMS 새로운 LinkedMultiValueMap <> (); params.add ( "ID", "6" ); params.add ( "텍스트"를 "텍스트" ); 문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.patch은 ( "/ 메시지 / 텍스트" ) .params (PARAMS)) andReturn ()하는 GetResponse () getContentAsString ()...; "결과 ==="+ mvcResult); @Test 공개 공극 deleteMessage ()가 발생 예외 { mockMvc.perform (MockMvcRequestBuilders.delete ( "/ 메시지 / 6" ).)를 andReturn (); 문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.get ( "/ 메시지" )) .andReturn ()하는 GetResponse () getContentAsString ()..; 에서 System.out.println ( "결과 ==="+ mvcResult); } @Test 공개 공극 saveMessage ()가 발생 예외 { 최종MultiValueMap <문자열, 문자열> = PARAMS 새로운 LinkedMultiValueMap <> (); params.add ( "텍스트"를 "텍스트" ); params.add ( "요약", "요약" ); 문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.post은 ( "/ 메시지" ) .params (PARAMS)) andReturn ()하는 GetResponse () getContentAsString ()...; 에서 System.out.println ( "결과 ==="+ mvcResult); } 개인 공극 saveMessages () { 위해 ( int로 I = 1; i가 <10; I ++ ) { 최종 MultiValueMap <문자열, 문자열> LinkedMultiValueMap <> (); params.add ( " params.add ( "요약", "요약"+ I); 시도 { MvcResult mvcResult = mockMvc.perform은 (MockMvcRequestBuilders.post은 ( "/ 메시지" ) .params (PARAMS)) andReturn ().; } 캐치 (예외 전자) { e.printStackTrace (); } } } }
제어 층 :
패키지 com.example.controller; 수입 com.example.domain.Message; 수입 com.example.service.MessageRepository; 수입 org.springframework.beans.factory.annotation.Autowired; 가져 org.springframework.web.bind.annotation을 *. ; 수입 은 java.util.List; @RestController @RequestMapping ( "/" ) 공개 수업 MessageController { @Autowired 개인 MessageRepository messageRepository; // 获取所有消息体 @GetMapping (값 = "메시지" ) 공개 목록 <메시지> 목록을 () { 목록<메시지> 메시지 = 이 .messageRepository.findAll (); 반환 메시지를; } // 创建一个消息体 @PostMapping (값 = "메시지" ) 공개 메시지 작성 (메시지 메시지) { 메시지 = 이 .messageRepository.save (메시지); 반환 메시지를; } // 使用请求进行修改넣어 @PutMapping (값 = "메시지" ) 공공 메시지 수정 (메시지 메시지) { 메시지 messageResult을 = 이 .messageRepository.update (메시지); 반환messageResult; } // 更新消息的텍스트字段 @PatchMapping (값 = "/ 메시지 / 텍스트" ) 공공 메시지 패치 (메시지 메시지) { 메시지 messageResult = 이 .messageRepository.updateText (메시지); 반환 messageResult을; } @GetMapping (값 = "메시지 / {ID}" ) 공공 메시지 GET (@PathVariable 긴 ID) { 메시지 메시지 = 이 .messageRepository.findMessage (ID); 반환 메시지를; } @DeleteMapping (값 = "메시지 / {ID}" ) 공공 무효은 (@PathVariable ( "ID"삭제 ) 롱 ID) { 이 .messageRepository.deleteMessage (ID)를; } }
인터페이스 레이어
패키지 com.example.service; 수입 com.example.domain.Message; 수입 은 java.util.List; 공용 인터페이스 MessageRepository { 공개 목록 <메시지> findall은 (); 공공 (메시지 메시지) 저장 메시지; 공공 메시지 업데이트 (메시지 메시지); 공공 메시지 UPDATETEXT (메시지 메시지); 공공 메시지 findMessage (긴 ID); 공공 무효 deleteMessage (긴 ID); }
서비스 레이어
패키지 com.example.service.impl; 수입 com.example.domain.Message; 수입 com.example.service.MessageRepository; 수입 org.springframework.stereotype.Service; 수입 인 java.util.ArrayList; 수입 은 java.util.List; 수입 java.util.concurrent.ConcurrentHashMap; 수입 java.util.concurrent.ConcurrentMap; 수입 java.util.concurrent.atomic.AtomicLong; 이 @Service ( "messageRepository" ) 공용 클래스 InMemoryMessageRepository이 구현 MessageRepository { 개인 정적 AtomicLong 카운터 =새로운 AtomicLong (); 민간 최종 인 ConcurrentMap <롱, 메시지> 메시지 = 새로운 ConcurrentHashMap의 <> (); @Override 공개 목록 <메시지> findall은 () { 목록 <메시지> 메시지 = 새로운 ArrayList를 <메시지> ( 이 .messages.values ()); 반환 메시지를; } @Override 공개 (메시지 메시지) {저장 메시지 긴 ID = message.getId (); 만약 (ID == 널 ) { ID = counter.incrementAndGet (); message.setId (ID); } 이 .messages.put (ID, 메시지); 반환 메시지를; } @Override 공공 메시지 업데이트 (메시지 메시지) { 이 .messages.put (message.getId (), 메시지); 반환 메시지를; } @Override 공개 메시지 UPDATETEXT (메시지 메시지) { 메시지 MSG = 이 .messages.get (message.getId ()); msg.setText (message.getText ()); 이 .messages.put (msg.getId (), MSG); 반환 MSG를; } @Override 공공 메시지 findMessage (긴 ID) { 반환 이 .messages.get (ID)를; } @Override 공공 무효 deleteMessage (긴 ID) { 이 .messages.remove (ID); } }