HttpMediaTypeNotAcceptableException для MediaType HTML - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть контроллер Spring Rest, как показано ниже:

@RestController
@RequestMapping(value = "/v1/files")
public class DataReader {

    @GetMapping(value = "/", produces = MediaType.TEXT_HTML_VALUE)
    public Employee readData () {
        Employee employee = new Employee();
        employee.setName("GG");
        employee.setAddress("address");
        employee.setPostCode("postal code");
        return employee;
    }
}

По сути, я хочу, чтобы этот контроллер возвращал html контент. Однако, когда я нажимаю URI из браузера или из почтальона, я получаю следующее исключение:

There was an unexpected error (type=Not Acceptable, status=406).
Could not find acceptable representation
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:316)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181)

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Ваш возвращаемый тип метода - объект Employee. Если вам нужно вернуть содержимое HTML, выберите любой из следующих параметров

  1. Преобразование контроллера из @RestController в @Controller, добавьте зависимость MVC для Spring, настройте движок шаблонов, создайте htmls и вернитесь. это из контроллера

  2. Вместо того, чтобы возвращать объект Employee из контроллера REST, используйте Streams для отправки HTML в виде байтового массива в объекте Response.

0 голосов
/ 04 ноября 2019

Для обслуживания html-контента, если он статический, вы можете использовать конечную точку контроллера, например:

@GetMapping(value = "/")
public Employee readData () {
    return "employee";
}

, и springboot вернет статическую html-страницу с именем "employee". Но в вашем случае вам нужно вернуть карту modelandview, чтобы динамические данные отображались в формате html:

@GetMapping(value = "/")
public Employee readData (Model model) {
    Employee employee = new Employee();
    employee.setName("GG");
    employee.setAddress("address");
    employee.setPostCode("postal code");
    model.addAttribute("employee",employee)
    return "employee";
}

Также удалите аннотацию @RestController из вашего класса и добавьте @Controller.

В противном случае, , если ваш сценарий использования требует, чтобы вы возвращали html-контент из конечной точки REST , тогда используйте:

@RestController
@RequestMapping(value = "/v1/files")
public class DataReader {

    @GetMapping(value = "/", produces = MediaType.TEXT_HTML_VALUE)
    public Employee readData () {
       // employees fetched from the data base
          String html = "<HTML></head> Employee data converted to html string";
          return html;
    }
}

или используйте return ResponseEntity.ok('<HTML><body>The employee data included as html.</body></HTML>')

...