org.springframework.web.reactive.function.UnsupportedMediaTypeException:内容类型'application / json; charset = UTF-8'不支持

时间:2018-07-25 08:30:36

标签: java spring-test

当我的代码如下时显示错误:

@Test
public void getTemplateByIdTest() throws Exception {
    client.get().uri("/template/getTemplate/7")
            .exchange()
            .expectStatus().isOk()
            .expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
            .expectBody(VtTemplateVO.class)
            .returnResult();
}

当我这样更改代码时,就可以了!

@Test
public void getTemplateByIdTest() throws Exception {
    client.get().uri("/template/getTemplate/7")
            .exchange()
            .expectStatus().isOk()
            .expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
            .expectBody(String.class)
            .returnResult();
}

为什么当我使用.expectBody(VtTemplateVO.class)时会说org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/json;charset=UTF-8' not supported

有人知道吗?请帮助,谢谢

4 个答案:

答案 0 :(得分:2)

我也遇到了这个由Jackson引起的问题.VtTemplateVO.class必须有一个带有注释属性的默认构造函数。例如我所做的-

@JsonCreator
public Comment(@JsonProperty("id")String id, @JsonProperty("text")String text, @JsonProperty("createdTime") LocalDate createdTime) {
        this.id = id;
        this.text = text;
        this.createdTime = createdTime;
}

希望它也对您有效。 :)

答案 1 :(得分:0)

除了使用@JsonProperty注释每个参数外,还可以使用-parameters标志编译代码(自Java 8起)。这会将参数名称保留在字节码中,从而允许Jackson使用它们。参见Maven docs

<compilerArgs>
  <arg>-parameters</arg>
</compilerArgs>

您还应该考虑此https://stackoverflow.com/a/44075684/2145769,现在参数名称已成为您API的一部分。

答案 2 :(得分:0)

使用

.accept(MediaType.APPLICATION_JSON)

package-lock.json

答案 3 :(得分:0)

显然,创建和填充对象的任何问题都可能导致此错误。

就我而言,我复制了 @JsonProperty,例如:

public class MyObject {
  @JsonProperty("foo")
  private String foo;

  @JsonProperty("foo")
  private String bar;
}

所以我固定:

public class MyObject {
  @JsonProperty("foo")
  private String foo;

  @JsonProperty("bar")
  private String bar;
}

它奏效了。

但我看到其他人评论说其他错误可能会导致此错误,例如:

  • 没有 setter 方法
  • 有重载的 setter
  • 没有默认构造函数