@RequestBody가 null 값을 가져옵니다.
심플 REST 서비스(POST)를 작성했습니다.그러나 우체부 @RequestBody에서 이 서비스를 호출하면 값이 수신되지 않습니다.
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
@RestController
public class Add_Policy {
@ResponseBody
@RequestMapping(value = "/Add_Policy", headers = {
"content-type=application/json" }, consumes = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.POST)
public Policy GetIPCountry( @RequestBody Policy policy) {
System.out.println("Check value: " + policy.getPolicyNumber());
return policy;
}
}
Java Bean 오브젝트는 다음과 같습니다.
public class Policy {
private String PolicyNumber;
private String Type;
private String Tenture;
private String SDate;
private String HName;
private String Age;
public String getPolicyNumber() {
return PolicyNumber;
}
public void setPolicyNumber(String policyNumber) {
PolicyNumber = policyNumber;
}
public String getType() {
return Type;
}
public void setType(String type) {
Type = type;
}
public String getTenture() {
return Tenture;
}
System.out.println이 PolicyNumber 값으로 null을 인쇄하고 있습니다.
이 문제를 해결할 수 있도록 도와주세요.
요청 본문에 전달하고 있는 JSON은
{
"PolicyNumber": "123",
"Type": "Test",
"Tenture": "10",
"SDate": "10-July-2016",
"HName": "Test User",
"Age": "10"
}
나는 짝수다.Content-Type
로로 합니다.application/json
@@RequestBody 를 합니다.import
,
대부분의 경우 문제를 일으킬 수 있는 오류입니다.
import io.swagger.v3.oas.annotations.parameters.RequestBody;
문제를 해결하기 위해 그것은 해야 한다.
import org.springframework.web.bind.annotation.RequestBody;
JSON 속성의 첫 번째 문자를 소문자로 설정하십시오.예.
{
"policyNumber": "123",
"type": "Test",
"tenture": "10",
"sDate": "10-July-2016",
"hName": "Test User",
"age": "10"
}
기본적으로 스프링은 getter와 setter를 사용하여 콩 오브젝트의 속성을 설정합니다.그리고 JSON 객체의 속성을 가져와서 같은 이름의 세터와 대조합니다.예를 들어 policyNumber 속성을 설정하려면 bean 클래스에서 setpolicyNumber()라는 이름의 setter를 검색하여 이를 사용하여 bean 객체의 값을 설정합니다.
세터는 놓쳤을 거야따라서 오브젝트 값은 설정되지 않습니다.
을 변경할 이하려면 JSON을 .@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
[예시의 정책]★래스 앞에 주석을 붙입니다.
Java 규약은 POJO(클래스의 속성)의 변수 이름을 소문자로 입력해야 합니다.
JSON 속성에 대문자가 포함되어 있기 때문에 장애가 발생합니다.
폼에는 롬복, 콩에는 롬복 주석을 달았습니다.아직 STS에 롬복 설치를 제대로 하지 않아 비슷한 문제가 발생하여 콩이 채워지지 않았습니다.
롬복 주석을 없앴더니 콩이 제대로 채워져 있었다.
STS에 lomboc이 제대로 설치되지 않은 것 같고, 제 콩에 lomboc 주석이 있는 것 같습니다.
Lombok API를 사용하는 경우 @ResponseBody 및 @RequestBody 주석에는 공개적으로 표시되거나 사용할 수 있는 Getters 및 Setters가 없습니다.그래서 늘 값을 가진 JSON 요청을 읽습니다.
따라서 이러한 @Getter, @Setter 주석을 Receive JSON response 및 Read JSON request 객체에 코멘트하여 동일한 getter 및 setter를 생성해야 합니다.(Spring-Boot-Devtools를 사용하여) 서버를 재시작하거나 핫 로드하면 확실히 작동합니다.다른 엔티티 또는 BO에 대해서도 lombok api를 사용할 수 있습니다.
내 경우는 롬복 문제였다.롬복 주석을 모두 제거하고 컨스트럭터, 세터, 게터를 수동으로 만들었습니다.
또한 JSON을 소문자로 설정하여 규칙을 따르도록 하겠습니다.
주석 사용org.springframework.web.bind.annotation.RequestBody
가 아니라org.springframework.web.bind.annotation.ResponseBody
이 경우 빈 생성자를 정의해야 합니다.
public MyClass(){}
이외에는lowerCamelCasing
더 필요한 것은 신청하는 것이었습니다.@JsonProperty(value="your expected JSON KEY name")
getter 및 setter의 각 방법 및 사용에 대해this
POJO/Bean/DTO 클래스의 연산자.
샘플 코드:
@JsonProperty(value="policyNumber")
public void setPolicyNumber(String policyNumber) {
this.policyNumber = policyNumber;
}
같은 문제가 발생했지만, 내 경우 한 필드만 설정되지 않았습니다.request body 객체의 로그는 해당 객체가 null로 수신되었음을 나타냅니다. 필드의 getter와 setter를 삭제하고 IDE를 사용하여 자동 생성하며 모두 정상적으로 작동합니다.
getter와 setter의 정의가 일치하지 않는 것도 원인이 될 수 있습니다.
저도 이 문제가 있었습니다만, 제 문제를 해결하는 가장 좋은 방법은 제 json 값에서 필드를 초기화할 때마다 첫 번째 인용문 뒤의 공간을 확인하는 것입니다.
스프링 속성 명명 전략(UPER_CAMEL_CASE, LOWER_CAMEL_CASE, LOWER_CASE 등)을 참조하십시오.디폴트 SNAK_CASE).spring은 전략에 따라 http controller 클래스 파라미터를 자동으로 변경합니다.이것은 json이 SNAK_CASE를 ex로 취득하는 요청과 일치하지 않을 수 있습니다.java 컨트롤러 클래스의 "myToken"을 사용하는 경우 클라이언트는 myToken 대신 my_token을 전송해야 합니다.
Lombok을 사용하는 경우 compile Only와 annotation Processor가 필요합니다.제 경우는 두 번째 프로세서를 놓쳤습니다.그래서 나는 모든 null 값을 얻었다.
compileOnly 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24'
1-엔티티 클래스 속성을 소문자로 시작합니다. 2-주석 확인. 3-컨스트럭터 확인--> **엔티티 클래스에는 두 개의 생성자가 있어야 합니다. 4-Getter 및 Setter 확인.
내 경우 날짜 형식이 잘못 지정되었습니다.
언급URL : https://stackoverflow.com/questions/38935912/requestbody-is-getting-null-values
'sourcecode' 카테고리의 다른 글
Response JSON을 Flutter에서 객체로 변환하는 방법 (0) | 2023.02.15 |
---|---|
Wordpress wp-admin이 https로 리다이렉트합니다. (0) | 2023.02.15 |
전체 달력 제목에 글꼴 멋진 아이콘 추가 (0) | 2023.02.15 |
Ajax 요청을 사용하여 브라우저에서 다운로드 (0) | 2023.02.15 |
URL에서 해시 제거 (0) | 2023.02.15 |