我正在使用Java Springboot和Angular 7开发聊天应用程序。我在spring Boot 和angular中使用事件。我尝试在spring Boot 中生成事件,以便angular侦听事件。然而,我得到以下错误:
Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]
下面是我在springboot中的控制器代码:
@CrossOrigin("*")
@RestController
@RequestMapping("/chat")
public class MessageController {
@Autowired
MessageService messageService;
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
private static final Logger logger = LoggerFactory.getLogger(MessageController.class);
@PostMapping(consumes = "application/json", produces = "application/json")
public GenericApiResponse<Map<String, Object>>message(@RequestBody MessageRequest req) {
logger.info("MessageController:: messagemethod [POST] /chat");
GenericApiResponse<Map<String, Object>> responseObj = new GenericApiResponse<>();
Object returnValue = new Object();
try {
returnValue = messageService.translateText(req);
} catch (Exception e) {
e.printStackTrace();
logger.error("EXCEPTION: "+e.getStackTrace().toString());
responseObj.setStatus(Constants.ERROR);
responseObj.setMessage("Internal Server Error");
}
Map<String, Object> resMap = new HashMap<>();
resMap.put("result", returnValue);
resMap.put("sender", req.getSender());
responseObj.setResponseObject(resMap);
responseObj.setStatus(Constants.SUCCESS);
MessageEvent messageEvent = new MessageEvent(this,"eventName", responseObj);
applicationEventPublisher.publishEvent(messageEvent);
return responseObj;
}
我不知道问题是什么,以及如何解决它。请帮我解决这个问题。提前感谢:)
3条答案
按热度按时间omjgkv6w1#
从第一次看你的代码,我可以观察到以下问题:
@ResponseBody
被添加,但没有返回响应,即方法类型为void。produces = "application/json"
对于没有返回响应的void方法没有意义。因此,对于rest端点,总是返回一些响应。你可以通过在你的方法的最后加上下面的return语句来解决这个问题:
此外,
@ResponseBody
意味着响应总是序列化为json,因此不需要显式指定, produces = "application/json"
。更新:
您是否可以尝试将
consumes = "application/json", produces = "application/json"
替换为和
确保请求头设置为
application/json
。此外,ensrueJackson的依赖性到位。
mxg2im7a2#
解决方案:angular中的
EventSource
默认采用Content-Type : text/event-stream
。所以我创建了一个新的方法,并添加了@RequestHeader(value = "Content-Type", defaultValue = "text/event-stream")
作为参数。kgsdhlau3#
如果没有返回类型对象的getter方法,则忽略对象的自动转换。如果你没有
GenericApiResponse
对象的getter方法,添加一个。