Spring 启动响应正文在 PostMan 中显示为空
Spring boot response body is showing empty in PostMan
我正在使用@Valid 注释来验证我的一些模型属性。它按预期工作,如果未按预期提供任何数据,则会返回 400 Bad Request 错误。但是响应主体总是空的。
我的控制器Class
import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.bnpp.leavemanagement.exception.DepartmentNotFoundException;
import com.bnpp.leavemanagement.exception.EmployeeAlreadyExistsException;
import com.bnpp.leavemanagement.exception.EmployeeNotFoundException;
import com.bnpp.leavemanagement.model.EmployeeModel;
import com.bnpp.leavemanagement.service.EmployeeService;
@RestController
@Validated
@RequestMapping("/employee")
public class EmployeeController
{
@Autowired
EmployeeService empService;
@PostMapping("/create")
public ResponseEntity<EmployeeModel> createEmployee(@RequestBody @Valid EmployeeModel empNew) throws EmployeeAlreadyExistsException, DepartmentNotFoundException, EmployeeNotFoundException
{
EmployeeModel resEmp = empService.addEmployee(empNew);
return new ResponseEntity( resEmp, HttpStatus.CREATED);
}
型号Class属性
@JsonProperty("firstName")
@NotEmpty(message = "FirstName cannot be empty")
private String firstName = null;
application.properties
spring.datasource.url=jdbc:h2:mem:leavemgmt
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
server.port=8443
server.ssl.key-alias=leavemanagement
server.ssl.key-store=classpath:leavemanagement.jks
server.ssl.key-store-type=JKS
server.ssl.key-store-password=password
server.error.include-message=always
server.error.include-binding-errors=always
server.error.include-exception=true
server.error.include-stacktrace=always
请帮助我了解在任何验证失败时如何在 Postman 中获取响应正文。
您需要在您的控制器中使用 BindingResult
在您的响应中添加您的错误:
public ResponseEntity<EmployeeModel> createEmployee(@Valid @RequestBody EmployeeModel empNew,BindingResult bindingResult)
{
if(bindingResult.hasErrors())
{
for(FieldError fieldError : bindingResult.getFieldErrors()) {
//you can define your ErrorMOdel dto here and add
//fieldError properties then add the whole errorList in
//your response.
//Finally, return the response from here
}
}
//if there is no errors in your request: execute this part:
EmployeeModel resEmp = empService.addEmployee(empNew);
return new ResponseEntity( resEmp, HttpStatus.CREATED);
}
根据需要更新:
您可以这样定义 EmployeeModel
:
public class EmployeeModel<T> implements Serializable
{
//your previously defined entities here
private List<T> errorList; //this is new one to show errors
//constructors, setters, getters
}
现在,当您遇到错误时,将之前的代码替换为:
if(bindingResult.hasErrors())
{
EmployeeModel response= new EmployeeModel();
for(FieldError fieldError : bindingResult.getFieldErrors())
{
response.setErrorList(bindingResult.getFieldErrors());
}
return new ResponseEntity( response,
HttpStatus.BAD_REQUEST);
}
您可以进行进一步的即兴创作:
您可以在 EmpoloyeeModel
中添加另一个字段作为状态, status
将在没有错误时设置为 success
,否则设置为 error
即 employeeModel.setStatus("success") or.setStatus("error")
视情况而定
更好的是,编写一个通用的 Response class 来保存所有类型的响应,如下所示:
@Data
@NoArgsConstructor
public class ServiceResponse<T> implements Serializable {
private HttpStatus status; //OK_Failure
private StatusCode statusCode; //code
private T body;
private List<T> errorList;
}
如果您对此有任何问题,请告诉我。
我正在使用@Valid 注释来验证我的一些模型属性。它按预期工作,如果未按预期提供任何数据,则会返回 400 Bad Request 错误。但是响应主体总是空的。
我的控制器Class
import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.bnpp.leavemanagement.exception.DepartmentNotFoundException;
import com.bnpp.leavemanagement.exception.EmployeeAlreadyExistsException;
import com.bnpp.leavemanagement.exception.EmployeeNotFoundException;
import com.bnpp.leavemanagement.model.EmployeeModel;
import com.bnpp.leavemanagement.service.EmployeeService;
@RestController
@Validated
@RequestMapping("/employee")
public class EmployeeController
{
@Autowired
EmployeeService empService;
@PostMapping("/create")
public ResponseEntity<EmployeeModel> createEmployee(@RequestBody @Valid EmployeeModel empNew) throws EmployeeAlreadyExistsException, DepartmentNotFoundException, EmployeeNotFoundException
{
EmployeeModel resEmp = empService.addEmployee(empNew);
return new ResponseEntity( resEmp, HttpStatus.CREATED);
}
型号Class属性
@JsonProperty("firstName")
@NotEmpty(message = "FirstName cannot be empty")
private String firstName = null;
application.properties
spring.datasource.url=jdbc:h2:mem:leavemgmt
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
server.port=8443
server.ssl.key-alias=leavemanagement
server.ssl.key-store=classpath:leavemanagement.jks
server.ssl.key-store-type=JKS
server.ssl.key-store-password=password
server.error.include-message=always
server.error.include-binding-errors=always
server.error.include-exception=true
server.error.include-stacktrace=always
请帮助我了解在任何验证失败时如何在 Postman 中获取响应正文。
您需要在您的控制器中使用 BindingResult
在您的响应中添加您的错误:
public ResponseEntity<EmployeeModel> createEmployee(@Valid @RequestBody EmployeeModel empNew,BindingResult bindingResult)
{
if(bindingResult.hasErrors())
{
for(FieldError fieldError : bindingResult.getFieldErrors()) {
//you can define your ErrorMOdel dto here and add
//fieldError properties then add the whole errorList in
//your response.
//Finally, return the response from here
}
}
//if there is no errors in your request: execute this part:
EmployeeModel resEmp = empService.addEmployee(empNew);
return new ResponseEntity( resEmp, HttpStatus.CREATED);
}
根据需要更新:
您可以这样定义 EmployeeModel
:
public class EmployeeModel<T> implements Serializable
{
//your previously defined entities here
private List<T> errorList; //this is new one to show errors
//constructors, setters, getters
}
现在,当您遇到错误时,将之前的代码替换为:
if(bindingResult.hasErrors())
{
EmployeeModel response= new EmployeeModel();
for(FieldError fieldError : bindingResult.getFieldErrors())
{
response.setErrorList(bindingResult.getFieldErrors());
}
return new ResponseEntity( response,
HttpStatus.BAD_REQUEST);
}
您可以进行进一步的即兴创作:
您可以在 EmpoloyeeModel
中添加另一个字段作为状态, status
将在没有错误时设置为 success
,否则设置为 error
即 employeeModel.setStatus("success") or.setStatus("error")
视情况而定
更好的是,编写一个通用的 Response class 来保存所有类型的响应,如下所示:
@Data
@NoArgsConstructor
public class ServiceResponse<T> implements Serializable {
private HttpStatus status; //OK_Failure
private StatusCode statusCode; //code
private T body;
private List<T> errorList;
}
如果您对此有任何问题,请告诉我。