将Custom类用作REST API服务的输入参数类型时,未检测到方法 [英] Method is not being detected when using the Custom class as input parameter type for the REST API service

查看:0
本文介绍了将Custom类用作REST API服务的输入参数类型时,未检测到方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Vuejs/Nuxtjs开发一个Web应用程序,该应用程序使用Axios调用我的Java服务,但在调用过程中收到错误:

POST http://localhost:9001/generate 500 (Internal Server Error)
我收到这个错误是因为我的Java服务类型接受Custom数据类型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服务方法输入参数数据类型更改为字符串,则检测到该方法并打印输入:

@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类如下所示:

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

我传递给Java服务的InputParameter如下所示:

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

推荐答案

发布答案对将来的其他人很有帮助。我尝试了一些方法,但都没有奏效,最后以下几个方法对我起作用了:

@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相关的一个小设置,这在这里是不相关的,因为它是我在另一个类中遗漏的特定于项目的设置。也许这就是我面临的问题。现在一切正常。

这篇关于将Custom类用作REST API服务的输入参数类型时,未检测到方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆