누군가 가 Spring 3의 주석 @RequestBody
과 설명을 설명 할 수 있습니까 @ResponseBody
? 그들은 무엇입니까? 모든 예가 좋을 것입니다.
답변
문서에는 16.3.3.4 @RequestBody 주석으로 요청 본문 매핑 이라는 전체 섹션이 있습니다 . 16.3.3.5 @ResponseBody 주석을 사용하여 응답 본문 매핑을 호출 했습니다 . 해당 섹션을 참조하십시오. 관련성 : @RequestBody
javadocs, @ResponseBody
javadocs
사용 예는 다음과 같습니다.
JQuery와 같은 JavaScript 라이브러리를 사용하면 다음과 같은 JSON-Object를 게시 할 수 있습니다.
{ "firstName" : "Elmer", "lastName" : "Fudd" }
컨트롤러 방법은 다음과 같습니다.
// controller
@ResponseBody @RequestMapping("/description")
public Description getDescription(@RequestBody UserStats stats){
return new Description(stats.getFirstName() + " " + stats.getLastname() + " hates wacky wabbits");
}
// domain / value objects
public class UserStats{
private String firstName;
private String lastName;
// + getters, setters
}
public class Description{
private String description;
// + getters, setters, constructor
}
이제 클래스 경로에 Jackson 이 있고 <mvc:annotation-driven>
설정 이있는 경우 Spring은 들어오는 JSON을 포스트 본문에서 UserStats 객체로 변환하고 ( @RequestBody
주석 을 추가했기 때문에 ) 반환 된 객체를 JSON으로 직렬화합니다 ( @ResponseBody
주석). 따라서 브라우저 / 클라이언트는 다음 JSON 결과를 볼 수 있습니다.
{ "description" : "Elmer Fudd hates wacky wabbits" }
완전한 작동 예는이 이전 답변을 참조하십시오 : https://stackoverflow.com/a/5908632/342852
참고 : RequestBody / ResponseBody는 물론 JSON으로 제한되지 않으며 일반 텍스트 및 XML을 포함한 여러 형식을 처리 할 수 있지만 JSON이 가장 많이 사용되는 형식 일 수 있습니다.
최신 정보
Spring 4.x 이후로, 보통 같은 @ResponseBody
방법으로 메소드 레벨에서 사용하지 않고 @RestController
클래스 레벨에서 사용합니다.
공식 Spring MVC 문서 에서 인용 한 내용은 다음과 같습니다 .
@RestController
A는 구성된 주석 자체가 애노테이션 메타
와@Controller
및@ResponseBody
그의 모든 방법 유형 레벨 상속 제어기 나타낼@ResponseBody
주석, 따라서, 도면의 해상도에 비해 응답 본체에 직접 기록 및 HTML 템플릿 렌더링이.
답변
@RequestBody : 메소드 매개 변수를 나타내는 어노테이션이 HTTP 요청의 본문에 바인드되어야합니다.
예를 들면 다음과 같습니다.
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
writer.write(body);
}
@ResponseBody 주석은 메소드에 넣을 수 있으며 리턴 유형이 HTTP 응답 본문에 직접 작성되어야하고 모델에 배치되거나 뷰 이름으로 해석되지 않아야 함을 나타냅니다.
예를 들면 다음과 같습니다.
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public @ResponseBody String helloWorld() {
return "Hello World";
}
또는 주석 대신 @RestController 주석을 사용할 수 있습니다 @Controller
. 이렇게하면를 사용할 필요가 없습니다 @ResponseBody
.
답변
아래는 Java 컨트롤러의 메소드 예입니다.
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public HttpStatus something(@RequestBody MyModel myModel)
{
return HttpStatus.OK;
}
@RequestBody 어노테이션을 사용하면 특정 호출을 처리하기 위해 시스템에서 작성한 모델과 값이 맵핑됩니다. @ResponseBody를 사용하면 요청이 생성 된 곳으로 무엇이든 보낼 수 있습니다. 두 가지 모두 사용자 정의 파서 등을 작성하지 않고도 쉽게 매핑됩니다.
답변
package com.programmingfree.springshop.controller;
import java.util.List;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.programmingfree.springshop.dao.UserShop;
import com.programmingfree.springshop.domain.User;
@RestController
@RequestMapping("/shop/user")
public class SpringShopController {
UserShop userShop=new UserShop();
@RequestMapping(value = "/{id}", method = RequestMethod.GET,headers="Accept=application/json")
public User getUser(@PathVariable int id) {
User user=userShop.getUserById(id);
return user;
}
@RequestMapping(method = RequestMethod.GET,headers="Accept=application/json")
public List<User> getAllUsers() {
List<User> users=userShop.getAllUsers();
return users;
}
}
위의 예에서 모든 사용자 및 특정 ID 세부 정보를 표시하려고합니다 .ID와 이름을 모두 사용하고 싶습니다.
1) localhost : 8093 / plejson / shop / user <—이 링크는 모든 사용자 정보를 표시합니다
2) localhost : 8093 / plejson / shop / user / 11 <—- 링크 수단으로 11을 사용하면 특정 사용자 표시 11 세부 사항
이제 아이디와 이름을 모두 사용하고 싶습니다
localhost : 8093 / plejson / shop / user / 11 / raju <—————– like 이것은 우리가 이것을 도와주세요 …. .