使用自定义 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;
}
我不明白这里出了什么问题。有人可以帮忙吗?
我尝试过的事情:
- 添加
@Consumes(MediaType.APPLICATION_JSON)
.
- 将方法更改为
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。也许这就是我面临的问题。现在一切正常。
我正在使用 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;
}
我不明白这里出了什么问题。有人可以帮忙吗?
我尝试过的事情:
- 添加
@Consumes(MediaType.APPLICATION_JSON)
. - 将方法更改为
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。也许这就是我面临的问题。现在一切正常。