当前位置: 首页 > 知识库问答 >
问题:

Spring Boot和Swagger文本/html响应映射

隗新霁
2023-03-14

我有一个非常简单的java spring boot swagger项目。

仅出于测试目的,我创建了两个映射类:name。java和名称容器。JAVA

public class Names {

@XmlAttribute(name="ref")
@ApiModelProperty(notes = "The auto-generated version of the product...")
private String key;

@XmlValue
@ApiModelProperty(notes = "The auto-generated version of the product...")
private String name;....-> rest of the class(Default constuctor and getters and setters)

...............

    @XmlRootElement(name="root")
public class NamesContainer {

    @XmlElement(name="listNames")
    @ApiModelProperty(notes = "The auto-generated version of the product")
    private List<Names> listNames;....-> rest of the class(Default constuctor and getters and setters)

对于响应,我使用一个@get方法:

    @RequestMapping(method = RequestMethod.GET, value = "/api/javainuse")
    @ApiOperation(value = "Get a scheduled process by id.",notes = "This is note ;)",response = NamesContainer.class,code = HttpURLConnection.HTTP_OK, produces="text/html")
    @ApiResponses(value = {@ApiResponse(code = HttpURLConnection.HTTP_OK, message = "set in case of success. Returns the requested scheduled process",  response = NamesContainer.class)})

    public NamesContainer sayHello() {

        Map<String, String> mapNames = new HashMap<String, String>();
        mapNames.put("Name1", "Docnho");
        mapNames.put("Name2", "Silvia");
        mapNames.put("Name3", "Pepa");
        mapNames.put("Name4", "Mima");
        mapNames.put("Name5", "Mohamed");

        List<Names> listNames = new ArrayList<Names>();

    for(Map.Entry<String, String> entryName : mapNames.entrySet())
    {
        listNames.add(new Names(entryName.getKey(), entryName.getValue()));
    }

    NamesContainer container = new NamesContainer(listNames);


    return container;
}

但是如果我尝试使用products=“text/html”

响应体是;

<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Fri Mar 15 18:43:55 EET 2019</div><div>There was an unexpected error (type=Not Acceptable, status=406).</div><div>Could not find acceptable representation</div></body></html> 

问题是,是否有可能映射我现有的对象NamesContainer.java,以生成超文本标记语言响应,以及如何做到这一点?

共有3个答案

乔伯寅
2023-03-14

是的,这是可能的。为超文本标记语言创建杰克逊数据格式模块。

我相信Spring Boot使用Jackson进行数据输出,Jackson支持以下格式:

  • JSON
  • HTML
  • 微笑
  • YAML
  • Avro
  • CSV

还有更多(https://github.com/FasterXML/jackson),但不支持HTML格式(这怎么可能?)。

HTML呈现需要模板。了解Spring MVChttps://spring.io/guides/gs/serving-web-content/.

另请阅读内容协商(https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc)

您可以使用RESTful@响应体方法和HTTP消息转换器,通常用于返回JSON或XML等数据格式。

(...) 视图完全能够生成JSON和XML,如果您愿意的话,视图通常用于为传统web应用程序生成HTML等表示格式。

宇文修文
2023-03-14

您的Pojo可能需要更明确的映射/注释来生成HTML。我猜你是在找

<table>
  <tr>
    <th>Name1</th>
    <th>Name2</th>
    <th>Name3</th>
    <th>Name4</th>
  </tr>
  <tr>
    <td>Peppa</td>
    <td>Mima</td>
    <td>Mohamed</td>
    <td>Docnho</td>
  </tr>
</table>

我不确定哪个注释可以帮助,但这是我开始的地方

左丘元徽
2023-03-14

没有办法(没有现成的方法)将POJO字段映射到带有注释的html。

Instrad可以使用Spring开箱即用的其他方法将POJO(模型)绑定到html:胸腺叶模板、Freemarker模板和JSP页面。

下面是一个可能的解决方案的例子:

  1. 使用HTML模板创建HTML页面。例如表格。html查看:
html lang-html prettyprint-override"><body>
    <table>
    <tr>
        <th>Key</th>
        <th>Name</th>
    </tr>
    <tr th:each="mapEnty: ${mapNames}">
        <td th:text="${mapEnty.key}" />
        <td th:text="${mapEnty.value}" />
    </tr>
    </table>
</body>
 类似资料:
  • 我是招摇过市的新手,正在从事创建通用http响应代码的API操作:- > 401:未经授权 '403':禁止 我通过定义响应尝试了,但出现了一个错误。有没有办法做到这一点?,避免每次操作后出现冗余代码块。任何帮助都将不胜感激。 提前感谢

  • 问题内容: 目前,我在使用新的Spring 5 WebClient时遇到问题,需要一些帮助来解决它。问题是: 我请求一些返回json响应的URL,其内容类型为 text / html; charset = utf-8 。 但不幸的是,我仍然遇到异常: org.springframework.web.reactive.function.UnsupportedMediaTypeException:不支

  • 将返回响应的控制器类的代码: 下面是具有一对一映射的两个实体类。 我得到的回应是: 如上面的响应所示,我只得到json值,我的意思是只得到没有列名的表值。因此,如何将json响应映射到响应协同响应键上。

  • 我正在使用 swagger 来生成我的 REST API 的文档。但是,我在指定某些 API 调用的响应时遇到问题。 这是我的代码: 这是它生成的文档: 而且我不明白为什么错误响应不像 200 响应那样属于“数组”类型。我想要的是所有响应的格式与 200 个响应(带有项目的数组)相同: 谢谢你抽出时间。

  • 目前我有一个问题与新的Spring5WebClient,我需要一些帮助来解决它。问题是: 我请求一些url返回内容类型为text/html;charset=utf-8的json响应。 顺便说一句,我在accept头中指向哪种类型并不重要,总是返回text/html。那么如何最终转换我的响应呢?