![](/img/trans.png)
[英]How to Set Values in a Request Scope Bean in Spring Boot Application
[英]How to send request scope bean as response in Spring Boot
我需要發送也包含請求信息的響應。 嘗試使用以下代碼,但出現以下異常:
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class OrderResponse {
private String discountDetails;
private boolean confirmedStatus;
private OrderDto orderDetails;
private String shortMsg;
private int status;
//Getter & Setters
}
public class OrderDto {
private int quantity;
private String product;
//Getters & Setters
}
Controller 和咨詢課程:
@RestController
@RequestMapping(value = "/orders")
public class OrderController {
@Autowired
private OrderResponse orderResponse;
....
@PostMapping(value = "/order/placeOrder")
public ResponseEntity<OrderResponse> placeOrder(@RequestBody OrderDto orderDto){
....
orderResponse.setOrderDetails(orderDto);//Adding request details to the response
....
return new ResponseEntity<>(orderResponse, HttpStatus.OK);
}
}
@RestControllerAdvice(assignableTypes = OrderController.class)
public class OrderExceptionHandler {
@Autowired
private OrderResponse orderResponse;
@ExceptionHandler(value = DataAccessException.class)
protected ResponseEntity<OrderResponse> constraintHandling(DataAccessException ex) {
....
orderResponse.setShortMsg(shortMsg);
orderResponse.setStatus(200);
....
return new ResponseEntity<>(orderResponse, HttpStatus.OK);
}
}
出現以下錯誤:
2020-05-10 18:39:34.362 ERROR 12620 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.springframework.aop.ClassFilter]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: spring.test.jpa.controllers.OrderResponse$$EnhancerBySpringCGLIB$$5deecefd["advisors"]->org.springframework.aop.support.DefaultIntroductionAdvisor[0]->org.springframework.aop.support.DefaultIntroductionAdvisor["classFilter"])] with root cause
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: spring.test.jpa.controllers.OrderResponse$$EnhancerBySpringCGLIB$$5deecefd["advisors"]->org.springframework.aop.support.DefaultIntroductionAdvisor[0]->org.springframework.aop.support.DefaultIntroductionAdvisor["classFilter"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.10.3.jar:2.10.3]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191) ~[jackson-databind-2.10.3.jar:2.10.3]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:944) ~[jackson-databind-2.10.3.jar:2.10.3]
.....
.....
請幫助解決這個問題,在此先感謝!
這是因為OrderDTO
和OrderResponse
都是序列化對象。 這會觸發Jackson
的自參考錯誤。
您可以配置您的ObjectMapper
bean 來禁用它。
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_SELF_REFERENCES, false);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.