2009-10-15 4 views
2

SpringMVC 태그 라이브러리를 사용하여 JSP로 온라인 양식을 만들었습니다. 내 양식 용 컨트롤러는 RESTful 웹 서비스입니다.SpringMVC 및 REST를 사용하여 양식을 제출할 때 오류 발생

(1) http://localhost:8080/myapp/applications/new

이 브라우저에서 온라인 양식을 (이 작품)를 표시합니다 :

평온한 웹 서비스는 두 통화가 있습니다.

(2) http://localhost:8080/myapp/applications/create

이 데이터베이스에 양식 데이터를 저장 (핸들 제출). 이것이 깨지는 곳입니다.

스프링 프레임 워크와 함께 제공되는 샘플 데모 petclinic 앱의 규칙을 따릅니다.

온라인 형태 :

<%@ page contentType="text/html;charset=UTF-8" language="java"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 

<html> 
    <body> 
     <form:form modelAttribute="application" method="POST" action="create"> 
     <table> 
     <tr> 
      <td>Name:</td> 
      <td><form:input path="name" size="30" maxlength="80"/></td> 
     </tr> 
     <tr> 
      <td>Description:</td> 
      <td><form:input path="description" size="30" maxlength="80"/></td> 
     </tr> 
     <tr> 
      <td>Image URL:</td> 
      <td><form:input path="imgUrl" size="30" maxlength="80"/></td> 
     </tr> 
     </table> 
     <input type="submit" value="Save" /> 
     </form:form> 
    </body> 
</html> 

폼 컨트롤러로 사용되는 RESTful 웹 서비스 :

내가 제출에 클릭 할 때 발생합니다
@Controller 
@Path(ApplicationsResource.APPLICATION_URL) 
public class ApplicationsResource 
{ 
    private final Logger log = 
      LoggerFactory.getLogger(ApplicationsResource.class); 

    public static final String APPLICATION_URL = "/applications"; 

    @Autowired 
    private ApplicationManager applicationManager; 

    @Autowired 
    private ProfileManager profileManager; 

    @POST 
    @Path("create") 
    @Produces(MediaType.TEXT_HTML) 
    public Model getNewApplication(@Context HttpServletRequest request, 
            @RequestAttribute Model model) 
    { 

     Application app = new Application(); 
     model.addAttribute("application", app); 
     try 
     { 
      if ("POST".equalsIgnoreCase(request.getMethod())) 
      { 
       if (app != null) 
       { 
        applicationManager.save(app); 
        log.info("Added application: " + app.getName()); 
       } 
       else 
       { 
        log.info("Application not added"); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      log.info("Exception: ", e); 
      throw new 
        WebApplicationException(Response.status(
        RestError.SERVER_ERROR_HTTP_RESP). 
        type("application/json;charset=utf-8"). 
        entity(new ErrorOutput(RestError.SERVER_ERROR_CODE, RestError.SERVER_ERROR_MSG, e.toString())).build()); 
      } 
     return model; 
    } 

    @InitBinder 
    public void setAllowedFields(WebDataBinder dataBinder) 
    { 
     dataBinder.setDisallowedFields(new String[] {"id"}); 
    } 

    @GET 
    @Path("new") 
    @Produces({ MediaType.TEXT_HTML }) 
    public ModelAndView getNewApplicationForm() 
    { 
     log.info("ApplicationsResource - Inside getNewApplicationForm"); 
     ModelAndView mv = new ModelAndView("/applications/applications_new"); 
     mv.addObject("application", new Application()); 
     return mv; 
    } 
} 

예외 :

POST/응용 프로그램을 실행 실패/ org.jboss.resteasy.spi.BadRequestException :

을 작성하십시오.

유형에 대한 메시지 본문 판독기를 찾을 수 없습니다 : 콘텐츠 형식의

인터페이스 org.springframework.ui.Model을 : 응용 프로그램/

조직에서 X-WWW-양식-urlencoded를. 나는이 exceptio을 받고있는 이유

사람이 알고 있나요 jboss.resteasy.core.MessageBodyParameterInjector $ (1) createReaderNotFound (MessageBodyParameterInjector.java:73) 엔?

누군가가이 문제를 도와 줄 수 있다면 ...

해피 프로그래밍을 감사하고 이것을 읽을 시간을내어 주셔서 감사합니다 정말겠습니까.

답변

3

RESTEasy 문제였습니다.이 수정으로 @Form 응용 프로그램을 매개 변수 목록에 넣고 @FormParam ("name")으로 도메인 모델 개체의 설정자를 붙입니다.

참조 : Integrating RESTEasy with SpringMVC

0

컨트롤러에 허용되는 MIME 형식과 매핑 방법을 컨트롤러에 알려주지 않았으므로 맵핑하기 위해 해당 MIME 형식과 연결된 Reader가 필요합니다.

+0

는 수정 매개 변수 목록 내부의 @Form 응용 프로그램 응용 프로그램을 넣고 @FormParam ("이름")으로 도메인 모델 객체의 setter를 붙이는되었다 ... RESTEasy가 문제가되었다. –

관련 문제