org.springframework.web.HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление при загрузке Java-весны - PullRequest
1 голос
/ 22 октября 2019

Я занимаюсь разработкой приложения для чата, используя java springboot и Angular 7. Я использую события весенней загрузки и 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;
}

Я не могу выяснить, в чем проблема и как ее решить. Пожалуйста, помогите мне решить эту проблему. Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Решение: EventSource в угловых значениях по умолчанию принимает Content-Type : text/event-stream. Поэтому я создал новый метод и добавил @RequestHeader(value = "Content-Type", defaultValue = "text/event-stream") в качестве параметра.

0 голосов
/ 22 октября 2019

С первого взгляда на ваш код я вижу следующие проблемы:

  1. @ResponseBody добавлено, но ответ не возвращается, т.е. тип метода void.

  2. produces = "application/json" не имеет смысла для метода void, не возвращающего ответ.

Следовательно, для конечной точки покоя всегда возвращают некоторый ответ. Вы можете исправить это, добавив в качестве следующего выражения в качестве оператора return:

return ResponseEntity.ok("your message");

Кроме того, @ResponseBody означает, что ответ всегда сериализуется в json, следовательно, нет необходимости явно указывать , produces = "application/json".

Обновление:

Можете ли вы также попробовать заменить consumes = "application/json", produces = "application/json" на

  consumes = MediaType.APPLICATION_JSON_VALUE, 
  produces = MediaType.APPLICATION_JSON_VALUE

И

, чтобы гарантировать, что заголовки запросаустановлены на application/json.

Кроме того, установлены зависимости Джексона.

...