REST-java.lang.IllegalStateException:已为此响应调用getOutputStream()

REST-java.lang.IllegalStateException:已为此响应调用getOutputStream(),java,spring,rest,spring-boot,Java,Spring,Rest,Spring Boot,当我试图调用GET方法时,我得到了非法状态异常,我不知道出了什么问题。你可以看到下面的日志 -日志 package com.medicalsystem.controller; 导入com.medicalsystem.model.Admission; 导入com.medicalsystem.service.AdmissionService; 导入com.medicalsystem.service.PatientService; 导入lombok.allargsconstuctor; 导入org.s

当我试图调用GET方法时,我得到了非法状态异常,我不知道出了什么问题。你可以看到下面的日志

-日志

package com.medicalsystem.controller;
导入com.medicalsystem.model.Admission;
导入com.medicalsystem.service.AdmissionService;
导入com.medicalsystem.service.PatientService;
导入lombok.allargsconstuctor;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.http.HttpStatus;
导入org.springframework.http.ResponseEntity;
导入org.springframework.web.bind.annotation.*;
@RestController
@AllArgsConstructor(onConstructor=@_uuz(@Autowired))
公共类许可控制员{
私人认可服务;
私人病人服务;
@RequestMapping(value=“/admission/{admissionId}”,method=RequestMethod.GET)
公共响应获取许可(@PathVariable(“admissionId”)int admissionId){
如果(!admissionService.exists(admissionId)){
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}
入院=admissionService.getById(admissionId);
返回新的响应状态(准入,HttpStatus.OK);
}
@RequestMapping(value=“/acmission”,method=RequestMethod.PUT)
公共响应更新任务(@RequestBody-Admission){
录取服务。保存或更新(录取);
返回新的响应状态(“已成功添加准入”,HttpStatus.OK);
}
}

在我看来,准入是一个实体类

import com.medicalsystem.model.Admission;

Admission admission = admissionService.getById(admissionId);
直接从web服务返回实体不是一个好的做法。 由于实体可以是活动的和管理的,因此对getter方法专门映射字段的任何调用都将导致加载相关实体。由于bean-to-json序列化程序将递归调用所有getter方法来构造json字符串,因此当实体相互引用时,它将以循环调用结束。您可以在日志中清楚地看到(StackOverflowerr)


创建一个响应Bean,定义要返回的字段,并将所需的数据从实体传输到响应Bean。

在堆栈跟踪中发现了这一点;无法写入JSON文档:无限递归(StackOverflowerError)”。这是Jackson试图序列化疾病和疾病描述之间的双向关系。杰克森对@JsonIgnore的注释可能会有所帮助,有一篇好文章[这里]()。@GrumpyWelshGit谢谢!它起作用了。
import com.medicalsystem.model.Admission;

Admission admission = admissionService.getById(admissionId);
java.lang.StackOverflowError: null
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_131]
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_131]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_131]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_131]
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_131]
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_131]
at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_131]
at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_131]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_131]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_131]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_131]