Java 忽略POST请求的JSON字段,但不应忽略GET请求的JSON字段
我不熟悉Spring引导框架。我有一个模型如下:Java 忽略POST请求的JSON字段,但不应忽略GET请求的JSON字段,java,json,spring,spring-boot,spring-mvc,Java,Json,Spring,Spring Boot,Spring Mvc,我不熟悉Spring引导框架。我有一个模型如下: public class Process{ private String processId; private ProcessStatus status; private hostname; private errorMessage; } 来自控制器的Post呼叫: @RequestMapping(value = "/process", method = RequestMethod.POST,
public class Process{
private String processId;
private ProcessStatus status;
private hostname;
private errorMessage;
}
来自控制器的Post呼叫:
@RequestMapping(value = "/process", method = RequestMethod.POST,
consumes = { MediaType.APPLICATION_JSON_UTF8_VALUE })
public HttpStatus updateProcess (@RequestBody Process process)
{
try {
processService.updateProcess(process);
return HttpStatus.OK;
} catch (Exception e)
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,e,
e);
}
}
获取流程的调用:
@RequestMapping(value = "/process", method = RequestMethod.GET,
produces = { MediaType.APPLICATION_JSON_UTF8_VALUE })
public Process getProcess (@RequestParam("processId") String processId)
{
try {
return processService.getProcess(processId);
} catch (Exception e) {
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,
e);
}
}
因此,post由负责更新流程信息的组件A执行。
组件B正在执行Get以获取现有流程。
问题:如何隐藏get而不是post的主机名和errorMessage。当我不小心执行@JsonIgnore时,它将忽略这两个请求。最简单的方法是使用另一个DTO(数据传输对象)类,该类不包含您不想发回的字段。在您的情况下,这意味着创建一个
ProcesDTO
类,如下所示:
public class ProcessDTO {
private String processId;
private ProcessStatus status;
private hostname;
}
此外,这意味着要在进程
和进程到
之间进行映射,这可以手动完成,也可以使用某种库来完成,例如
假设Process
是某种实体类,实际上并不建议直接使用它们发送回JSON数据 您可以使用该功能。您可以定义几个不同的级别:
public class Views {
public static class Public {
}
public static class Internal extends Public {
}
}
现在,您需要注释POJO
属性:
public class Process{
@JsonView(Views.Public.class)
private String processId;
@JsonView(Views.Public.class)
private ProcessStatus status;
@JsonView(Views.Internal.class)
private String hostname;
@JsonView(Views.Internal.class)
private String errorMessage;
}
当您已经有了这些方法时,您需要对API
方法进行注释<代码>获取:
@RequestMapping(value = "/process", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_UTF8_VALUE })
@JsonView(Views.Public.class)
public Process getProcess (@RequestParam("processId") String processId)
对于帖子
:
@RequestMapping(value = "/process", method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_UTF8_VALUE })
@JsonView(Views.Internal.class)
public HttpStatus updateProcess (@RequestBody Process process)
当然,您可以为视图选择更好的名称。以上只是阅读链接文章后的一个示例用法。我没有对它进行测试,但您应该了解大致情况。谢谢您的回复:)。。我仍然希望在不介绍其他课程的情况下完成它。。。比如为字段提供一些注释,并在get和post期间分别管理这些字段。