WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Spring Framework · Guru · question 93 of 100

How can you create custom Spring MVC view resolvers and view technologies for rendering non-standard response formats?

📕 Buy this interview preparation book: 100 Spring Framework questions & answers — PDF + EPUB for $5

Spring MVC provides support for several view technologies such as JSP, Thymeleaf, Freemarker, etc. These view technologies are used to render the server-side templates into HTML responses that are sent to the client’s browser. However, there may be situations where you need to create a custom view resolver to render non-standard response formats.

Here are the steps to create custom Spring MVC view resolvers and view technologies:

1. Extend the AbstractTemplateViewResolver class:

The AbstractTemplateViewResolver class is an abstract implementation of the ViewResolver interface. You can extend this class to create your custom view resolver. The AbstractTemplateViewResolver provides common functionality that is required by most view resolvers.

For example, you can create a custom view resolver for rendering JSON responses as follows:

public class JsonViewResolver extends AbstractTemplateViewResolver {

    public JsonViewResolver() {
        setViewClass(JsonView.class);
        setContentType("application/json");
    }
}

In this example, we have extended the AbstractTemplateViewResolver class and set the view class to be JsonView. We have also set the contentType to "application/json" so that the client knows that the response is in JSON format.

2. Implement the View interface:

The View interface provides the render() method that generates the response content. You need to create a class that implements this interface and provides the logic to generate the response content in the required format.

For example, you can create a JsonView as follows:

public class JsonView implements View {

    private List<String> modelKeys;

    public JsonView(List<String> modelKeys) {
        this.modelKeys = modelKeys;
    }

    @Override
    public String getContentType() {
        return "application/json";
    }

    @Override
    public void render(Map<String, ?> model, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> result = new HashMap<>();
        for (String key : modelKeys) {
            Object value = model.get(key);
            if (value != null) {
                result.put(key, value);
            }
        }
        mapper.writeValue(response.getWriter(), result);
    }
}

In this example, we have implemented the View interface and provided the logic to generate the JSON response. The JsonView takes a list of model keys that it will include in the response. We are using the Jackson ObjectMapper to serialize the response object into JSON and write it to the response output stream.

3. Register the custom view resolver:

Finally, you need to register your custom view resolver with Spring MVC. You can do this in your WebMvcConfigurerAdapter implementation as follows:

@Configuration
@EnableWebMvc
public class MyWebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.viewResolver(new JsonViewResolver());
    }
}

In this example, we have overridden the configureViewResolvers() method of the WebMvcConfigurerAdapter and registered our JsonViewResolver.

With these steps, you have created a custom view resolver and a custom view technology to render non-standard response formats.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Spring Framework interview — then scores it.
📞 Practice Spring Framework — free 15 min
📕 Buy this interview preparation book: 100 Spring Framework questions & answers — PDF + EPUB for $5

All 100 Spring Framework questions · All topics