使用自定义 class 作为 REST API 服务的输入参数类型时未检测到方法

Method is not being detected when using the Custom class as input parameter type for the REST API service

我正在使用 Vuejs/Nuxtjs 开发 Web 应用程序,它使用 Axios 调用我的 Java 服务,但在调用过程中出现错误:

POST http://localhost:9001/generate 500 (Internal Server Error)

我收到此错误是因为我的 Java 服务类型接受自定义数据类型 InputParameter 的输入参数。如果我更改为 String 那么它就可以正常工作。所以我想知道我应该对前端调用或我的 Java 服务进行哪些更改,以便它可以与 InputParameter type.

一起使用

以下是我对 Java 服务的 Vuejs 调用:

const headers = { 'Content-Type': 'application/json' }

this.$axios.post('/generate', { ...JSON.parse(inputParameter) }, { headers })
.then((response) => {
    console.log(JSON.stringify(response.data))
})
.catch((error) => {
    console.log(error)
})

以下是我的 Java 服务方法,它不使用自定义数据类型 InputParameter,调用未检测到该方法并且执行不在方法内:

@Path("/generate")
@Produces(MediaType.APPLICATION_JSON)
@APIResponses(value = {
        @APIResponse(responseCode = "200", description = "returns list of JSON Objects"),
        @APIResponse(responseCode = "500", description = "An internal Server Error occurred")
})
public String generate(final InputParameter inputParameter){
    System.out.println(inputTemplate.toString());
    return null;
}

如果我将上面的 JAVA 服务方法输入参数数据类型更改为 String,则检测到该方法并打印输入:

@Path("/generate")
@Produces(MediaType.APPLICATION_JSON)
@APIResponses(value = {
        @APIResponse(responseCode = "200", description = "returns list of JSON Objects"),
        @APIResponse(responseCode = "500", description = "An internal Server Error occurred")
})
public String generate(final String inputParameter){
    System.out.println(inputTemplate);
    return null;
}

我不明白这里出了什么问题。有人可以帮忙吗?

我尝试过的事情:

  1. 添加@Consumes(MediaType.APPLICATION_JSON).
  2. 将方法更改为 public String generate(@RequestBody final InputParameter inputParameter)

我的 InputParameter class 看起来像这样:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class InputParameter {
    private List<String> names;
    private List<String> jobs;
}

我传递给 Java 服务的 InputParameter 看起来像这样:

{
  "names":[
    "Batman",
    "Superman",
    "Ironman"
  ],
  "jobs":[
    "Fighting",
    "Fyling",
    "Teching"
  ]
}

亲爱的,在后端 api 正在接受 InputParameter 类型的对象。为了解决这个问题,你必须创建一个与 InputParameter class 相同的 class 并生成一个对象并将该对象发送到后端。

如果您需要更多帮助,请告诉我!

发布答案可能对以后的其他人有所帮助。我尝试了一些东西,但没有任何效果,最后以下对我有用:

@POST
@Path("/generate")
@Produces(MediaType.APPLICATION_JSON)
@APIResponses(value = {
        @APIResponse(responseCode = "200", description = "returns list of JSON Objects"),
        @APIResponse(responseCode = "500", description = "An internal Server Error occurred")
})
public String generate(final InputParameter inputParameter){
    System.out.println(inputTemplate.toString());
    return null;
}

还有一个我必须更改的与 Jackson ObjectMapper 相关的小设置,这与此处无关,因为我在另一个 class 中遗漏了我的 project-specific。也许这就是我面临的问题。现在一切正常。