검색 기능은 사실, 주소창에 요청을 보내는거다. 검색을 해보면 ?q=같은 것이 떠있는데,
이게 바로 그 "요청의 내역"이다.
https://
www.google.com/ - 도메인
search - 엔드 포인트
?q=폴라리스&ie=UTF-8 - 쿼리스트링
이용자가 - /emp 엔드포인트에 접속할건데
firstName이 ne인 사람만 검색해줘
주소창: /emp?firstName=ne
서버(컨트롤러 ex:카운터직원)
@GetMapping("/emp")
@RequestParam 쿼리스트링 -> 변수
플로우의 과정은 대충 이렇다. :
컨트롤러
: 서비스님, 직원리스트 주세요 이름에 ne가 포함된 직원 리스트로 주시면 되요.
서비스
: 리파지토리님, 직원 entity리스트 주세요 이름에 ne가 포함된 직원 entity리스트 주세요.
리파지토리
: ne가 포함된 걸 찾았습니다.
: 서비스님 직원 entity리스트 드릴게요.
-
서비스
: 감사합니다, 직원dto리스트로 만들었습니다.
: 컨트롤러님, 리스트를 드릴게요.
컨트롤러
: 고객님 요청하신 /emp?firstName=ne 나왔습니다
저번 시간에 했던 @GetMapping("/emp") 등은 엔드 포인트에 포함이 된다.

이렇게 치면 홍길동이 콘솔에 뜬다.



package com.example.hr1.domain.emp.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.hr1.domain.emp.dto.EmpDetailDTO;
import com.example.hr1.domain.emp.dto.EmpTableDTO;
import com.example.hr1.model.employees.entity.EmployeesEntity;
import com.example.hr1.model.employees.repository.EmployeesRepository;
@Service
public class EmpService {
@Autowired
private EmployeesRepository employeesRepository;
public List<EmpTableDTO> getSearchEmpTableData(String firstName){
// firstName이 null이면 findAll
// firstName이 null이 아니면 findByFirstName~
if(firstName == null){
return EmpTableDTO.fromEntityList(employeesRepository.findAll());
} else {
return EmpTableDTO.fromEntityList(employeesRepository.findByFirstNameContainingIgnoreCase(firstName));
}
}
public List<EmpTableDTO> getEmpTableData() {
// List<EmployeesEntity> employeesEntityList = employeesRepository.findAll();
// List<EmpTableDTO> empTableDTOList = new ArrayList<>();
// for (int i = 0; i < employeesEntityList.size(); i++) {
// EmployeesEntity employeesEntity = employeesEntityList.get(i);
// EmpTableDTO empTableDTO = EmpTableDTO.builder()
// .employeeId(employeesEntity.getEmployeeId())
// .firstName(employeesEntity.getFirstName())
// .build();
// empTableDTOList.add(empTableDTO);
// }
// return empTableDTOList;
return EmpTableDTO.fromEntityList(employeesRepository.findAll());
}
public EmpDetailDTO getEmpDetailData(Integer employeeId){
Optional<EmployeesEntity> employeesEntityOptional = employeesRepository.findByEmployeeId(employeeId);
if(!employeesEntityOptional.isPresent()){
throw new RuntimeException("잘못된 요청입니다.");
}
return EmpDetailDTO.fromEntity(employeesEntityOptional.get());
}
}
// 인풋이 가지고 있는 값을 가지고 오면 된다.
document.querySelector("#searchButton").addEventListener("click", ()=> {
// alert(document.querySelector("#searchValue").value);
// 쿼리 스트링을 하려면 어떻게 해야하는지를 떠올려보자
// 서버에도 적은게 나갔다.
location.href = "/emp?firstName=" + alert(document.querySelector("#searchValue").value);
});
글 잘 봤습니다, 감사합니다.