구디아카데미/JAVA
1210 코드 실행시간 설정, lombok 생성자, 유효성 검사
COCO_develop
2024. 12. 10. 12:10
@RestController
@RestController
public class UserRest {
@GetMapping(path = "/userJson")
public List<Map<String,Object>> user(){
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> u1 = new HashMap<String,Object>();
u1.put("name", "user1");
u1.put("age", 20);
list.add(u1);
Map<String,Object> u2= new HashMap<String,Object>();
u2.put("name", "user1");
u2.put("age", 20);
list.add(u2);
Map<String,Object> u3 = new HashMap<String,Object>();
u3.put("name", "user1");
u3.put("age", 20);
list.add(u3);
return list;
}
}
@RestController: 반환값을 자동으로 JSON 문자열로 변환되어 반환함
기본값: @GetMapping(path = "/userJson", produces = MediaType.APPLICATION_JSON_VALUE)
@RestController의 맵핑 메서드의 반환 타입: List<Map<String,Object>>
public static final String APPLICATION_JSON_VALUE = "application/json";
/**
* Public constant media type for {@code application/json;charset=UTF-8}.
* @deprecated as of 5.2 in favor of {@link #APPLICATION_JSON}
* since major browsers like Chrome
* <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=438464">
* now comply with the specification</a> and interpret correctly UTF-8 special
* characters without requiring a {@code charset=UTF-8} parameter.
*/
MediaType.class
http://localhost/userJson
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
--> pom.xml에 의존성 추가하면 XML타입으로 변환도 가능
@RestController
public class UserRest {
@GetMapping(path = "/userXml", produces = MediaType.APPLICATION_XML_VALUE)
public List<Map<String,Object>> userXml(){
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> u1 = new HashMap<String,Object>();
u1.put("name", "user1");
u1.put("age", 20);
list.add(u1);
Map<String,Object> u2= new HashMap<String,Object>();
u2.put("name", "user1");
u2.put("age", 20);
list.add(u2);
Map<String,Object> u3 = new HashMap<String,Object>();
u3.put("name", "user1");
u3.put("age", 20);
list.add(u3);
return list;
}
}
코드 실행 시간 특정
(Ex)Application.java에 @EnableScheduling 추가
( ): 프로젝트 이름
@Component
public class MySchedule {
@Scheduled(cron="0 0 7 1 * *")
public void scheduleTest() {
// 특정 날짜에 실행될 코드
System.out.println("스케줄링 테스트");
}
}
매월 1일 오전 7시
생성자(롬복)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberCommand {
private String name;
private int age;
}
@AllArgsConstructor -> MemberCommand(String,int)
- 모든 필드마다 하나의 파라미터값을 가진 생성자 생성
- 순서 주의
@NoArgsConstructor -> MemberCommand - 파라미터값 없는 기본 생성자 생성
validation을 이용한 커맨드객체 유효성 검사
https://cafe.naver.com/jjdev/16191
[41] springboot validation을 이용한 커맨드객체 유효성 검사
1) validation 의존성 추가 pom.xml 의존성 확인 2) 커맨드 객체의 유효성 체크 ※ 커맨드 객체의 유효성 체크 애노테이션 종류(하나의 필드에 겹처사용 가능) ...
cafe.naver.com
@Controller
public class MemberController {
// 백엔드 유효성 검사 Spring API
@GetMapping("/addMember")
public String addMember() {
return "addMember";
}
@PostMapping("/addMember")
public String addMember(@Valid MemberCommand memberCommand, Errors err, Model model) {
System.out.println(memberCommand.toString());
System.out.println(err.hasErrors()); // MemberCommand m 매개값을 채울 때 에러 유무
// 유효성 검사에 걸려서 입력 실패
if(err.hasErrors()) {
for(FieldError fe : err.getFieldErrors()) {
System.out.println(fe.getField()); // name
System.out.println(fe.getDefaultMessage()); // message
model.addAttribute(fe.getField()+"Msg", fe.getDefaultMessage());
}
return "addMember"; // 유효성 체크에 걸리면 Command 객체 + Msg 입력폼으로 다시 포워딩
}
// 입력 성공 시
// insert sql 호출 서비스
return "redirect:/";
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberCommand {
@Size(min=2, message = "이름을 2자 이상 입력하세요")
private String name;
}
post 되기 전 유효성 검사가 됨
<body>
<h1>ADD</h1>
<form method="post" action="/addMember">
name :
<input type="text" name="name" value="${memberCommand.name}">
<button type="submit">가입</button>
<br><span>${nameMsg}</span>
</form>
</body>