0

get과 함께 API를 호출하고 POST의 경우 빈 개체를 제공하는 동안이 문제가 발생합니다. 아래는 코드 스 니펫입니다.Sprint MVC @ModelAttribute POST가 작동하지 않습니다.

@Controller 
@RequestMapping("/demo") 
public class DemoController { 
@RequestMapping(value = "/create") 
    public ModelAndView createUser(@ModelAttribute User user) { 
    ... 
    ... 
    } 
} 

GET : 로컬 호스트 : 8080/데모/create.json 이름 = 시험 & 제목 =이 폼 데이터를 사용하여 POST가 작동하지 않는 잘 작동합니다. 나는 비어있는 물건을 얻고있다.

public class User implements Serializable { 
    private String name; 
    private String title; 

    ... 
} 
+0

그래서 POST 요청에서'createUser' 메쏘드가 호출됩니다. 그러나'User' 객체는'name'과'title'을 널입니까? –

+2

양식을 표시 할 수 있습니까? –

답변

1

다음 코드를 제안합니다.

@RequestMapping(value = "/create", method = RequestMethod.GET) 
public ModelAndView createUser() { 

    ModelAndView modelAndView = new ModelAndView("/createuser.jsp"); 
    modelAndView.addObject("user", new User()); 
    return modelAndView; 
} 

@RequestMapping(value = "/create", method = RequestMethod.POST) 
public ModelAndView createUserProcess(@ModelAttribute("user") User user,) { 
    // save user to db 

} 

호기심이 없습니다. createUser를 사용하여 양식을 표시하고 createUserProcess로 처리해야하지 않습니까? 또한 양식에 다음 항목이 있는지 확인하십시오.

<form:form commandName="user" modelAttribute="user"> 


</form:form> 
+2

무엇이 변경 되었습니까? 'method' 속성이없는'@ RequestMapping'은 모든 HTTP 요청 유형을 처리합니다. –

+0

폼을 표시하고 처리하려고한다고 가정했습니다. 필요가 없기 때문에 createUser에 아무 것도 전달하지 않았습니다. createUser가 양식 처리 코드 인 경우 createUserProcess를 createUser로 변경하십시오. 그 외에도 동일한 메소드가 GET과 POST 메소드를 받아 들일 수 없다. (적어도 내가 마지막으로 체크했을 때) – tshenolo

+0

OP의 코드가 의미하기 때문에, 그들의 createUser 메소드는 POST와 GET을 모두 처리 할 것이다. 제안한 변경 사항은 실제 문제로 변경되지 않습니다 (아직 실제로는 알지 못함). –

0

친절한 답장을 보내 주셔서 감사합니다. 내 컨트롤러의 유효성을 검사하기 위해 우편 배달부를 사용하고있었습니다. 멀티 파트 해석자를 추가해야한다는 것을 알았습니다.

아래는 그 문제를 수정 한 행입니다.

<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 

감사합니다.

+0

정확히 이것을 어디에 추가 했습니까? 나는 같은 문제에 직면하고있다. – p0tta

관련 문제