복붙노트

[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. ==============================

    1.이 방법은 어떨까요?

    이 방법은 어떨까요?

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public String showItem(@PathVariable("id") Long id,
                Model uiModel) {
           User user = (User)uiModel.asMap().get("user");
       ...    
    }
    
  2. ==============================

    2.@SessionAttribute 사용

    @SessionAttribute 사용

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
        public String showItem(@PathVariable("id") Long id, @SessionAttribute("user") User user,
                Model uiModel) {
       ...    
    }
    
  3. from https://stackoverflow.com/questions/11618895/values-of-pathvariable-and-modelattribute-overlapping by cc-by-sa and MIT license