Hibernate 기반 지속성 레이어가있는 Spring 4 웹 애플리케이션이 있다고 가정 해 보겠습니다. 내 모델의 기본 CRUD 작업을 지원하는 RestController
을 만들고 싶습니다. 레코드를 가져 오는 메소드를 만드는 것은 장애없이 작동합니다.Spring REST 컨트롤러에서 JSON을 Hibernate 모델로 매핑
@RequestMapping(value = "/stuff/list", method = RequestMethod.GET)
public List<Stuff> getStuff(){
return stuffService.findAll();
}
Jackson은 객체 직렬화를 처리하는데 아무런 문제가 없습니다. 하지만 POST 요청을 통해 새 레코드를 만드는 메소드를 추가하려면 어떻게해야합니까? 이런 간단한 방법을 지원하는 쉬운 방법이 있습니까?
@RequestMapping(value = "/stuff/new", method = RequestMethod.POST)
public Integer getStuff(@RequestParam("stuff") Stuff stuff){
return stuffService.save(stuff);
}
이와 비슷한 기능이 있습니까? 또는 게시 된 양식 데이터를 새 개체에 수동으로 매핑해야합니까?
솔루션 여기
내가 몇 단계가, 내 문제를 해결하는 방법입니다. 첫째, 내 마지막 컨트롤러 방법 :
@RequestMapping(value = "/stuff/new", method = RequestMethod.POST)
public Integer getStuff(@RequestBody Stuff stuff){
return stuffService.save(stuff);
}
은 이미, 크로스 원산지 자원 공유 할 수 있도록 응용 프로그램 API에 대한 모든 요청에 적용되는 필터를했지만, 이에 대한 수정 요청 내용 유형을 지정할 수 있도록 필요했다 :
내web.xml
파일에 등록되어
public class SimpleCORSFilter implements Filter{
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override public void init(FilterConfig filterConfig) throws ServletException { }
@Override public void destroy() { }
}
: I는 아래와 같은 요청을 할 때 지금
<filter>
<filter-name>cors</filter-name>
<filter-class>com.company.app.util.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
, 올바르게 매핑합니다 내 모델에 JSON을 제출하고 새 인스턴스를 유지하십시오.
var stuff = {
name: "Some stuff",
description: "This is some stuff."
}
$.ajax({
url: url,
method: "post",
dataType: "json",
data: JSON.stringify(stuff),
contentType: "application/json"
}).done(function(data){
console.log(data);
}).fail(function(x, status, e){
console.log(e);
});
내용이 html 형식의 POST 또는 JSON입니까? – Affe
@Affe : JSON, 브라우저 AJAX 요청 또는 Spring 'RestTemplate'을 통해 전송됩니다. – woemler