[SPRING] POST 및 SPRING-MVC를 통해 여러 객체를 보내는 문제
SPRINGPOST 및 SPRING-MVC를 통해 여러 객체를 보내는 문제
여러 정보를 받아야하는 REST 서비스를 개발 중입니다. 이 경우 두 개의 객체와 속성이 있습니다.
이것은 내가 POST 요청을 테스트하고있는 자바 스크립트입니다.
var user = {
username: "admin",
password: "admin"
};
var userToSubscribe = {
username: "newuser",
password: "newpassword",
email: "user@1and1.es"
};
var openid = "myopenid";
$.ajax({
url: '/myportal/rest/subscribeUser.json',
type: 'POST',
dataType: 'json',
contentType: 'application/json',
mimeType: 'application/json',
data: JSON.stringify({ user: user, userToSubscribe: userToSubscribe, openid: openid})
});
POST 요청 :
JSON
openid
"myopenid"
user
Object { username="admin", password="admin"}
userToSubscribe
Object { username="newuser", password="newpassword", email="user@1and1.es"}
Source
{"user":{"username":"admin","password":"admin"},"userToSubscribe":{"username":"newuser","password":"newpassword","email":"user@1and1.es"},"openid":"myopenid"}
그리고 POST를 처리하는 컨트롤러 :
@RequestMapping(method=RequestMethod.POST, value="/subscribeUser.json")
public @ResponseBody Message subscribeUser(@RequestBody("user") User user, @RequestBody("userToSubscribe") User userToSubscribe, @RequestParam String openid){
...
}
그리고 그 오류는
POST subscribeUser.json 400 잘못된 요청 localhost : 8080 990 B [:: 1] : 8080
내가 뭘 잘못하고 있죠?
고맙습니다
해결법
-
==============================
1.요청 본문에는 전체 JSON 콘텐츠가 포함됩니다. 따라서 JSON을 매핑하려면 하나의 RequestBody annotated-parameter 만 사용하십시오. 다음과 같이해야합니다.
요청 본문에는 전체 JSON 콘텐츠가 포함됩니다. 따라서 JSON을 매핑하려면 하나의 RequestBody annotated-parameter 만 사용하십시오. 다음과 같이해야합니다.
public @ResponseBody Message subscribeUser(@RequestBody String str) ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(str);
그리고 mapper의 convertValue 메소드를 사용하여 문자열에서 다른 객체를 가져옵니다.
JsonNode node = mapper.readTree(str); User theUser = mapper.convertValue(node.get("user"), User.class);
다른 객체들도 마찬가지로
-
==============================
2.@ModelAttributes는 JSON을 허용하는 RESTful 메서드에서 사용할 수 없습니다. 적절한 방법은 @RequestBody를 사용하는 것이라고 여기 있습니다. 대부분의 경우 래퍼 클래스에서 객체를 래핑해야하지만, 이전에 한 번 요청으로 여러 JSON 객체를 직접 전달하지는 않았으므로 잘못되었을 수 있습니다.
@ModelAttributes는 JSON을 허용하는 RESTful 메서드에서 사용할 수 없습니다. 적절한 방법은 @RequestBody를 사용하는 것이라고 여기 있습니다. 대부분의 경우 래퍼 클래스에서 객체를 래핑해야하지만, 이전에 한 번 요청으로 여러 JSON 객체를 직접 전달하지는 않았으므로 잘못되었을 수 있습니다.
그렇다면 JSON 인수를 제거하고 가능하면 URI 경로의 일부로 전달하는 대신 REST API를 고려하면 좋은 생각이라고 생각합니다. 나는이 블로그 게시물을 통해 독서를 제안합니다.
-
==============================
3.모든 객체를 포함하는 Java Bean (POJO)을 만들 수 있습니다.
모든 객체를 포함하는 Java Bean (POJO)을 만들 수 있습니다.
class JavaBean{ private User user; private UserTOSubscribe userToSubscribe; private Long openId; // getter and setter }
이 빈을 웹 서비스로 전달한다. 그래서 웹 서비스는 ..처럼 보입니다.
@RequestMapping(method=RequestMethod.POST, value="/subscribeUser.json") public @ResponseBody Message subscribeUser(@RequestBody JavaBean javaBean) { ... }
from https://stackoverflow.com/questions/19654120/problems-sending-multiple-objects-through-post-and-spring-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @Configuration과 @Bean 어노테이션으로 작업하는 Spring (0) | 2019.04.07 |
---|---|
[SPRING] "이름이 '제품'인 지속성 단위가 없습니다. ' (0) | 2019.04.07 |
[SPRING] 스프링 보안의 최대 동시 사용자 (0) | 2019.04.06 |
[SPRING] Spring MVC 컨텍스트 외부에서 Spring Validator 사용 (0) | 2019.04.06 |
[SPRING] Spring 3.2.4에서 XSS를 이스케이프 처리하는 @RequestBody가있는 @InitBinder (0) | 2019.04.06 |