[SPRING] Spring POST는 null 값을 가진 객체를받습니다.
SPRINGSpring POST는 null 값을 가진 객체를받습니다.
JSON을 Tomcat 서버에 올바르게 보내는 것처럼 보이는 AngularJS 웹 응용 프로그램이 있지만 서버가 null 값을받습니다. 내 속성 이름이 이미 소문자이기 때문에이 질문은 도움이되지 않았으며 @RequestBody 표기법을 이미 가지고 있기 때문에이 질문은 도움이되지 않았습니다. 편집 : 의견에서 지적했듯이 실제로이 표기법이 없습니다. 나는 그것을 잘못 읽고 있었다.
해당 서버 방법은 다음과 같습니다.
@PostMapping(path="/kind/add")
public @ResponseBody String addNewKind(Kind kind) throws Exception {
if (kind.getName() == null) {
throw new Exception("Name not found.");
}
kindRepository.save(kind);
return "Saved";
}
받을 것으로 예상되는 Kind 객체는 다음과 같습니다.
@Entity
public class Kind {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
@OneToMany(mappedBy="kind")
private Set<Card> cards;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Card> getCards() {
return cards;
}
public void setCards(Set<Card> cards) {
this.cards = cards;
}
}
요청하는 방법은 다음과 같습니다.
var uri = 'http://localhost:8080/catalog/api/kind/';
function create(name) {
var deferred = $q.defer();
var data = {
'name': name
};
$http({
method: 'POST',
url: uri + 'add',
data: angular.toJson(data),
headers: {
'Content-Type': 'application/json; charset=UTF-8'
}
}).then(function(response) {
deferred.resolve(response.data);
}).catch(function(error) {
console.error('Error while adding kind');
deferred.reject(error);
});
return deferred.promise;
}
이것은 서버로 전송 된 JSON입니다.
{"name":"Something"}
N.B. id가 자동 생성되고 카드가 비어 있기 때문에 id 또는 cards 매개 변수를 보내지 않고도 도망 갈 수 있다고 가정했습니다. 그러나 다음 JSON을 보낼 때 동일한 null 결과가 나타납니다.
{"id":0,"name":"Something","cards":[]}
요청 헤더는 다음과 같습니다.
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Connection: keep-alive
Content-Length: 20
Content-Type: application/json; charset=UTF-8
Cookie: __distillery=08c4ef1_752470a4-…ID=lr9remoqoi0ht13v1urq5lq8r7
Host: localhost:8080
Referer: http://localhost:8080/catalog/
User-Agent: Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0
그리고 이것은 디버그 모드에서 kind 객체 인수를 볼 때 서버가받는 것입니다.
kind= Kind
cards= null
id= 0
name= null
해결법
-
==============================
1.메소드에 @RequestBody 어노테이션을 사용해야합니다. 컨트롤러는 본문이 무엇인지 알지 못하므로 게시 된 개체가 메서드의 Kind 매개 변수에 바인딩되지 않거나 "만들지"않습니다.
메소드에 @RequestBody 어노테이션을 사용해야합니다. 컨트롤러는 본문이 무엇인지 알지 못하므로 게시 된 개체가 메서드의 Kind 매개 변수에 바인딩되지 않거나 "만들지"않습니다.
@PostMapping(path="/kind/add") public String addNewKind(@RequestBody Kind kind) throws Exception { if (kind.getName() == null) { throw new Exception("Name not found."); } kindRepository.save(kind); return "Saved"; }
새로운 '종류'가 반환 될 것으로 예상되는 경우 컨트롤러 방법을 다음과 같이 표시하려고합니다.
@PostMapping(path="/kind/add") public Kind addNewKind(@RequestBody Kind kind) throws Exception { if (kind.getName() == null) { throw new Exception("Name not found."); } return kindRepository.save(kind); }
참고로 JSON을 작성할 때 작은 따옴표를 사용하고 있습니다. angular.toJson ()을 사용하여 데이터를 변환하고 있으므로 확인해야합니다. JSON 문자열을 직접 보내서 상호 작용하려는 경우 일반적으로 작동하지 않습니다. JSON은 작은 따옴표를 사용하지 않습니다.
from https://stackoverflow.com/questions/47618559/spring-post-receives-object-with-null-values by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring의 @Transactional이 보호 된 메소드에서 작동하지 않는 이유는 무엇입니까? (0) | 2019.09.13 |
---|---|
[SPRING] 페이지 간 모델 데이터 유지 관리 (Spring 3 MVC) (0) | 2019.09.13 |
[SPRING] Spring AOP : @After를 사용하여 메소드에서 예외가 발생했는지 확인하는 방법은 무엇입니까? (0) | 2019.09.13 |
[SPRING] 봄 @RequestMapping (0) | 2019.09.13 |
[SPRING] jUnit 테스트에서 데몬이 아닌 스레드가 종료되는 이유는 무엇입니까? (0) | 2019.09.13 |