Java MediaType HTML的HttpMediaTypeNotAcceptableException

Java MediaType HTML的HttpMediaTypeNotAcceptableException,java,spring,spring-boot,spring-mvc,spring-rest,Java,Spring,Spring Boot,Spring Mvc,Spring Rest,我有弹簧休息控制器,如下所示: @RestController @RequestMapping(value = "/v1/files") public class DataReader { @GetMapping(value = "/", produces = MediaType.TEXT_HTML_VALUE) public Employee readData () { Employee employee = new Employee(); e

我有弹簧休息控制器,如下所示:

@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)

为了提供html内容,如果内容是静态的,则可以使用控制器端点,如:

@GetMapping(value = "/")
public Employee readData () {
    return "employee";
}
springboot将返回名为“employee”的静态html页面。但在您的情况下,您需要返回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

否则,如果您的用例要求您从REST端点返回html内容,则使用如下方法:

@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;
    }
}
@RestController
@请求映射(value=“/v1/files”)
公共类数据读取器{
@GetMapping(value=“/”,products=MediaType.TEXT\u HTML\u值)
公共雇员readData(){
//从数据库中提取的员工
String html=“员工数据转换为html字符串”;
返回html;
}
}

或者使用
return ResponseEntity.ok('作为html包含的员工数据')

来提供html内容,如果内容是静态的,则可以使用控制器端点,如:

@GetMapping(value = "/")
public Employee readData () {
    return "employee";
}
springboot将返回名为“employee”的静态html页面。但在您的情况下,您需要返回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

否则,如果您的用例要求您从REST端点返回html内容,则使用如下方法:

@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;
    }
}
@RestController
@请求映射(value=“/v1/files”)
公共类数据读取器{
@GetMapping(value=“/”,products=MediaType.TEXT\u HTML\u值)
公共雇员readData(){
//从数据库中提取的员工
String html=“员工数据转换为html字符串”;
返回html;
}
}

或者使用
return ResponseEntity.ok('以html形式包含的员工数据')

方法的返回类型是object employee。如果您需要返回HTML内容,请选择以下任何选项

  • 将控制器从
    @RestController
    转换为
    @controller
    ,添加spring MVC依赖项,配置模板引擎,创建HTML并从控制器返回

  • 使用Streams将HTML作为响应实体中的字节数组发送,而不是从REST控制器返回Employee对象


  • 方法的返回类型为object Employee。如果您需要返回HTML内容,请选择以下任何选项

  • 将控制器从
    @RestController
    转换为
    @controller
    ,添加spring MVC依赖项,配置模板引擎,创建HTML并从控制器返回

  • 使用Streams将HTML作为响应实体中的字节数组发送,而不是从REST控制器返回Employee对象


  • 如果希望当前代码正常工作,需要做两件事,1.)将方法return type更改为string 2.)return employee.toString()这回答了你的问题吗?首先,它是一个
    RestController
    ,因此它可以作为简单的表示。如果你想以html的形式提供内容,那么改为
    @Controller
    ,如果你想让当前代码正常工作,你需要做两件事,1.)将方法返回类型改为字符串2。)返回employee.toString()这回答了你的问题吗?首先,它是一个
    RestController
    ,因此它可以作为简单的表示。如果你想以html形式提供内容,那么请改为
    @Controller
    ,谢谢你的回答。你能分享一些示例代码或参考一些链接吗?谢谢你的回答。你能分享一些示例代码或链接吗请参阅一些链接。是的,我的用例是从Rest端点返回Html。因此,您的意思是我们必须手动将对象数据转换为Html,然后以字符串形式返回Html。@user2603985是的,这是一种方法。当您以文本\ Html \值形式提供PRODUCTS参数时,它需要一个与文本\ Html等效的字符串。是的,我的用例是返回Html from Rest endpoint。您的意思是我们必须手动将对象数据转换为Html,然后以字符串形式返回Html。@user2603985是的,这是一种方法。当您以TEXT_Html_值形式提供products参数时,它需要一个与TEXT_Html等价的字符串。