Performance 使用'对性能的影响;私人静态最终版';Spring3REST控制器中的字符串

Performance 使用'对性能的影响;私人静态最终版';Spring3REST控制器中的字符串,performance,rest,spring-mvc,Performance,Rest,Spring Mvc,我正在开发基于Spring3MVC的RESTAPI。在每次调用中,我都向JSON响应添加两个变量:“description”和“result”。 例如: @RequestMapping(value = "entity.htm", method = RequestMethod.GET) public ModelAndView get() { ModelAndView mav = new ModelAndView(JSON_VIEW); mav.addObject("descript

我正在开发基于Spring3MVC的RESTAPI。在每次调用中,我都向JSON响应添加两个变量:“description”和“result”。 例如:

@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;
}
创建一个
私有静态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次。

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


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

是的,这是有道理的。这是一个很好的练习。如果需要更改此值,可以节省您的时间和精力。就内存使用或处理时间而言,这并不重要,但更好

如果您打算不止一次地使用这些字符串,那么将其转换为静态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);
    }

这是一个JSON响应。

我使用的是spring的一个视图:“是”-为什么?一些解释就可以了。是的,可以。参见OP对另一个答案的评论。此外,您甚至可以使用
@zeroplagl使用jsp发送
JSON
。所讨论的代码声明该方法返回modelandview。Json是Json,Json中没有表示逻辑。另一个原因没有意义,它定义了一个名为jsonView的bean,类型为jacksonmapper,jacksonmapper只是将pojo转换为json。客户端得到一个
json
响应。这是唯一重要的事情。
[{"codigo":9701,"uf":{"uf":"DF","nome":"DISTRITO FEDERAL"},"nome":"BRASILIA                                     "}]