[SPRING] @PathVariable 및 @ModelAttribute 값 중첩
SPRING@PathVariable 및 @ModelAttribute 값 중첩
@SessionAttributes와 함께 세션에 저장된 User 개체가 있습니다. 그리고 세션의 값이 null 일 때마다 초기화하기 위해 @ModelAttribute로 장식 된 간단한 메소드.
사용자 등급 :
@Entity
@Table( name="USER")
public class User implements java.io.Serializable {
private Long id;
private String username;
private String password;
....
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name ="ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
...
제어 장치:
@RequestMapping("/item")
@Controller
@SessionAttributes({"user"})
public class MyController {
@ModelAttribute 메소드 :
@ModelAttribute("user")
public User createUser(Principal principal) {
return userService.findByUsername(principal.getName());
}
이 모든 특별한 방법을 제외하고는 모두 예상대로 작동하는 것 같습니다.
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String showItem(@PathVariable("id") Long id, @ModelAttribute("user") User user,
Model uiModel) {
...
}
문제는 User.id가 @PathVariable ( "id")로 설정된다는 것입니다. 나는 @RequestParam과도이 문제에 빠졌다 고 생각한다. 둘 다 같은 이름과 유형을 가지고 있기 때문에 그럴 것이라고 생각합니다. Spring의 문서 (아래 참조)를 읽은 후에 이것이 예상 된 동작이라고 가정합니다.
그러나, 나는이 시나리오가 상당히 일반적이라고 생각할 것입니다. 다른 사람들이 이것을 어떻게 다루고 있습니까? 내 발견이 정확하고 이것이 예상되는 동작 (또는 버그)이라면 이것은 매우 오류가 발생하는 것 같습니다.
가능한 해결책:
어떤 제안?
해결법
-
==============================
1.이 방법은 어떨까요?
이 방법은 어떨까요?
@RequestMapping(value = "/{id}", method = RequestMethod.GET) public String showItem(@PathVariable("id") Long id, Model uiModel) { User user = (User)uiModel.asMap().get("user"); ... }
-
==============================
2.@SessionAttribute 사용
@SessionAttribute 사용
@RequestMapping(value = "/{id}", method = RequestMethod.GET) public String showItem(@PathVariable("id") Long id, @SessionAttribute("user") User user, Model uiModel) { ... }
from https://stackoverflow.com/questions/11618895/values-of-pathvariable-and-modelattribute-overlapping by cc-by-sa and MIT license