java - 从不同的请求返回不同的 JSON 对象

标签 java json spring rest design-patterns

我在 Spring Controller 中有一个 writeResponse 方法,它将 DTO 写入 Json :

private void writeResponse(String type , Object objectToWrite , ResourceResponse response){
    try {

        MyDTO myDto= new MyDTO ();

        ObjectMapper mapper = new ObjectMapper();
        response.getWriter().write(mapper.writeValueAsString(myDto));

    }
    catch (final JsonGenerationException e) {
        log.error(e.getMessage());
    } catch (final JsonMappingException e) {
        log.error(e.getMessage());
    } catch (final IOException e) {
        log.error(e.getMessage());
    }
}

writeResponse 方法由多个方法调用,每个调用者方法都是不同的 REST 端点。 目前只有一种 DTO 类型:MyDTO。不过,将会添加更多 DTO 类型。为了确定应该写入哪个 DTO,有一个“type”方法参数。所以上面的方法可以变成:

  private void writeResponse(String type , Object objectToWrite , ResourceResponse response){
            try {

if(type == "1"){
                MyDTO myDto= new MyDTO ();

                ObjectMapper mapper = new ObjectMapper();
                response.getWriter().write(mapper.writeValueAsString(myDto));
}
else if(type == "2")
{
                MyDTO2 myDto2= new MyDTO2 ();

                ObjectMapper mapper = new ObjectMapper();
                response.getWriter().write(mapper.writeValueAsString(myDto2));
}

            }
            catch (final JsonGenerationException e) {
                log.error(e.getMessage());
            } catch (final JsonMappingException e) {
                log.error(e.getMessage());
            } catch (final IOException e) {
                log.error(e.getMessage());
            }
        }

这感觉有点笨拙。我正在尝试实现一个干净的方法,根据调用的端点返回不同的 JSON。有比我建议的更好的方法吗?

注意:上面的代码是伪代码和 java 的混合。

最佳答案

由于您有单独的 URL,每个 URL 都呈现不同的 JSON 内容,因此听起来这里唯一的共同代码是

ObjectMapper mapper = new ObjectMapper();
response.getWriter().write(mapper.writeValueAsString(myDto));

也许这就是你的 writeResponse 应该做的。将其更改为类似的内容

  private void writeResponse(Object objectToWrite , ResourceResponse response){
        try {

            ObjectMapper mapper = new ObjectMapper();
            response.getWriter().write(mapper.writeValueAsString(objectToWrite));
        }
        catch (final JsonGenerationException e) {
            log.error(e.getMessage());
        } catch (final JsonMappingException e) {
            log.error(e.getMessage());
        } catch (final IOException e) {
            log.error(e.getMessage());
        }
    }

并让调用者决定创建哪个 DTO。如果您想抽象出选择创建哪个 DTO 的逻辑,那么您可以在单独的方法中执行此操作。此时您的 Controller 只是委托(delegate)给这两个方法。

关于java - 从不同的请求返回不同的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980736/

相关文章:

java - 如何使用 Spring MVC 的单表继承获取子类属性

Java 8 打破递归循环

java - notifyDataSetChanged();未找到源异常

javascript - 当父键名称未知时访问 JSON 项

java - Jackson JSON 类结构

java - Spring应用程序所需的web.xml

java - 如何动态加载具有公共(public)抽象类的jar?

java - 图像在 ImageView 中不可见

xml - 在 emacs 中访问和写入文件时对其进行预处理/后处理

java - 延迟任务:scheduler first execution in Spring 3