Contents
반응형
UserControllerAPI
package com.cafe24.mysite.controller.api;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.cafe24.mysite.dto.JSONResult;
import com.cafe24.mysite.service.UserService;
import com.cafe24.mysite.vo.UserVo;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@RestController("userAPIController")
@RequestMapping("/user/api")
public class UserController {
@Autowired
private UserService userService;
//@ResponseBody
@ApiOperation(value="이메일 존재 여부")
@ApiImplicitParams({@ApiImplicitParam(name = "email2", value = "이메일 주소"
, required = true, dataType = "string", defaultValue = "") })
@RequestMapping(value="/checkemail",method=RequestMethod.GET)
public JSONResult checkEmail(@RequestParam(value="email", required=true, defaultValue="") String email) {
Boolean exist = userService.existEmail(email);
return JSONResult.success(exist);
}
// responseEntity 응답할때 내용을 조작할 수 있음
@PostMapping(value="/join")
public ResponseEntity<JSONResult> join(@RequestBody @Valid UserVo userVo,BindingResult result) {
if( result.hasErrors() ) {
List<ObjectError> list = result.getAllErrors();
for(ObjectError error : list) {
System.out.println(error);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JSONResult.fail(error.getDefaultMessage()));
}
}
return ResponseEntity.status(HttpStatus.OK).body(JSONResult.success(""));
}
}
UserVO
package com.cafe24.mysite.vo;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
public class UserVo {
private Long no;
@NotEmpty
@Length(min=2, max=8)
private String name;
@Email
@NotEmpty
private String email;
//@Pattern(regexp="(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,20}", message="비밀번호는 8자 이상 20자 이하의 알파벳, 숫자, 특수문자를 조합하여 작성해야 합니다.")
@Length(min=8, max=20, message="비밀번호는 8자 이상 20자 이하로 입력해야 합니다.")
private String password; //비밀번호
private String gender;
private String joinDate;
public UserVo() {
}
public UserVo(String email, String password) {
this.email = email;
this.password = password;
}
public Long getNo() {
return no;
}
public void setNo(Long no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getJoinDate() {
return joinDate;
}
public void setJoinDate(String joinDate) {
this.joinDate = joinDate;
}
@Override
public String toString() {
return "UserVo [no=" + no + ", name=" + name + ", email=" + email + ", password=" + password + ", gender="
+ gender + ", joinDate=" + joinDate + "]";
}
}
UserControllerTest
package com.cafe24.mysite3.controller.api;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import com.cafe24.mysite.config.AppConfig;
import com.cafe24.mysite.config.TestWebConfig;
import com.cafe24.mysite.service.GuestbookService2;
import com.cafe24.mysite.vo.UserVo;
import com.google.gson.Gson;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes= {AppConfig.class, TestWebConfig.class})
@WebAppConfiguration
public class UserControllerTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
private GuestbookService2 guestbookService2;
// swagger 작업해줘야함
@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testUserJoin() throws Exception {
UserVo userVo=new UserVo();
//1. Normal User's Join Data
userVo.setName("안대혁");
userVo.setEmail("kickscar@gmail.com");
userVo.setPassword("12345678");
userVo.setGender("MALE");
UserVo userVo2=new UserVo();
//1. Invalidation in Name:
userVo2.setName("안");
userVo2.setEmail("kickscar@gmail.com");
userVo2.setPassword("12345678");
userVo2.setGender("MALE");
ResultActions resultActions = mockMvc
.perform(post("/user/api/join").contentType(MediaType.APPLICATION_JSON).content(new Gson().toJson(userVo2)));
resultActions.andExpect(status().isBadRequest()).andDo(print())
.andExpect(jsonPath("$.result",is("fail")));
}
}
Custom Tag 만들기
@ValidGender
private String gender;
반응형