package hello.itemservice.web.validation;
import hello.itemservice.domain.item.Item;
import hello.itemservice.domain.item.ItemRepository;
import hello.itemservice.domain.item.SaveCheck;
import hello.itemservice.domain.item.UpdateCheck;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Slf4j
@Controller
@RequestMapping("/validation/v3/items")
@RequiredArgsConstructor
public class ValidationItemControllerV3 {
private final ItemRepository itemRepository;
@GetMapping("/{itemId}")
public String item(@PathVariable long itemId, Model model) {
Item item = itemRepository.findById(itemId);
model.addAttribute("item", item);
return "validation/v3/item";
}
@GetMapping("/add")
public String addForm(Model model) {
model.addAttribute("item", new Item());
return "validation/v3/addForm";
}
대충 이런 클래스가 있다고 했을 때
@RequestMapping("/validation/v3/items/")
클래스단에서 이렇게 설정한다면
메소드 단에서는 /add , /get이 아니라 add get처럼 할 수 있을 거 같은데
하지 않는다는 것은 실무에서 아래와 같이 하는게 정석인건가요?
@RequestMapping("/validation/v3/items")
왜 그렇게 하는지랑은 별개로 클래스단 패스의 마지막에 /를 붙이지 않아도 원하시는대로 쓸 수 있습니다. RequestMapping 끝이랑 GetMapping 앞에 둘 다 슬래시가 없어도 조합할 때 보정해줘요.
테스트 해보시면 아시겠지만 맨 앞이나 맨 뒤에 /가 있고 없고는 다 보정이 들어가긴 합니다. 양쪽다 있는 경우에도 1개로 바뀌어서 처리되고
그 내용 스프링부트3부터 바뀐거로아는데
이 말 듣고 바로 같은 코드 부트 3.0.5로 해봤는데 잘 동작되네요. 맨 앞뒤 /는 보정됩니다.
ㄱㅅㅎㅎ
감사합니다 형님 프린이라 몰랐네요 부트에서 알아서 보정해주면 그냥 습관(?) 혹은 팀마다 규칙 인가 보군요