1

我正在研究基于 Spring 3 MVC 的 REST API。在每次调用中,我都会向 JSON 响应添加两个变量:“描述”和“结果”。例如:

@RequestMapping(value = "entity.htm", method = RequestMethod.GET)
public ModelAndView get() {
    ModelAndView mav = new ModelAndView(JSON_VIEW);
    mav.addObject("description", "entity list");
    mav.addObject("result", someService.getAll());
    return mav;
}

private static final创建一个字符串池并在每次需要时使用它们对应用程序的性能是否有意义?我的意思是这样的:

@Controller
public class MyController {

    private static final String JSON_VIEW = "jsonView";

    private static final String VAR_DESCRIPTION = "description";
    private static final String VAR_RESULT = "result";

    private static final String DESC_CREATED = "entity created";
    private static final String DESC_ENTITY_LIST = "entity list";
    private static final String DESC_ACCESS_DENIED = "forbidden";

    @RequestMapping(value = "entity.htm", method = RequestMethod.PUT)
    public ModelAndView put(HttpServletResponse response) {
        ModelAndView mav = new ModelAndView(JSON_VIEW);
        if (!entityService.someChecking()) {
            mav.addObject(VAR_DESCRIPTION, DESC_ACCESS_DENIED);
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        } else {
            mav.addObject(VAR_DESCRIPTION, DESC_CREATED);
            mav.addObject(VAR_RESULT, entityService.save(new Entity()));
            response.setStatus(HttpServletResponse.SC_CREATED);
        }
        return mav;
    }

    @RequestMapping(value = "entity.htm", method = RequestMethod.GET)
    public ModelAndView get(HttpServletResponse response) {
        ModelAndView mav = new ModelAndView(JSON_VIEW);
        if (!entityService.someChecking()) {
            mav.addObject(VAR_DESCRIPTION, DESC_ACCESS_DENIED);
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        } else {
            mav.addObject(VAR_DESCRIPTION, DESC_ENTITY_LIST);
            mav.addObject(VAR_RESULT, entityService.getAll());
        }
        return mav;
    }

    // and so on
}

其中一些状态我只使用一次,但 DESC_ACCESS_DENIED 我在一个 REST 控制器中最多使用 10 次。

4

2 回答 2

0

是的,这确实有道理。这是一个很好的做法。如果您需要更改此值,它可以节省您的时间和精力。它在内存使用或处理时间方面非常微不足道,但它更好。

如果您打算多次使用这些字符串,那么将 then 转换为 static final 是一个很好的做法。但请注意,您的方法没有返回 JSON 响应。JSON 响应是这样的:

@RequestMapping(value = "/porUF", method = RequestMethod.GET)
    public @ResponseBody List<Municipio> municipios(
            @RequestParam(value = "uf", required = true) String uf) {

        if ( uf.length() != 2) {
            return null;    
        }

        return municipioBO.findByUf(uf);
    }

@ResponseBody 注释会将 List 转换为 JSON 对象,并且 HTTP GET 的响应是这样的:

[{"codigo":9701,"uf":{"uf":"DF","nome":"DISTRITO FEDERAL"},"nome":"BRASILIA                                     "}]

这是一个 JSON 响应。

于 2013-07-11T15:59:22.157 回答
0

您的 get 没有返回 json,它返回一个视图。

我更喜欢使用枚举而不是静态最终整数 - 以后更容易添加功能。

于 2013-07-11T13:13:45.100 回答